IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

[Dates] fonctions pour manipuler les temps


Sujet :

Langage PHP

  1. #1
    Membre éclairé Avatar de xess91
    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    408
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 408
    Par défaut [Dates] fonctions pour manipuler les temps
    Bonjour,

    je réalise un script php qui à pour but de me donner un calendrier dynamique avec ajax. La partie ajax tourne bien parcontre mon script php produit une erreur et une incompréhension.

    Le mois de février de chaque année me donne 27 jours alors que pour les autres mois, le même script, fait bien la distinction entre les mois en 30 et 31 jours, seul les février me donne 27 jours c'est bizar.

    Ensuite je peux faire défiler les mois et les années depuis décembre 2008 jusqu'a janvier 2010 pas moin pas plus, et dans mon script je n'ai pas mis de blocage ou de nombre de mois à exécuter, c'est libre, car avec ajax je récupère la valeur de la div ou le mois et l'année sont affiché et par mktime j'incrémente ou je décrémente.

    Voila mon script php je pense que l'ajax n'aura pas d'utilité enfin j'espère que ça ira:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
     
    <?php 
    if($_GET['categ'] != NULL AND $_GET['moi'] != NULL)
    	{
    	$moi = $_GET['moi'];
    	$valeur = $_GET['categ'];
    	$arri = 'ar';
    	$ava = 'av';
    	if($valeur == $arri)
    		{
    		$extract = substr($moi, 0, 7);
    		$month = substr($extract, 0, 2);
    		$year = substr($extract, 3, 6);
    		$time = strtotime('1-'.$month.'-'.$year);
    		$m=1;
    		$mois = mktime(0, 0, 0, date('n', $time) - $m);
     
    		echo date('m', $mois).'-'.date('Y', $mois);
     
    		$nbj=intval(date('t', $mois));
     
    		$ligne = 0;
    		echo '<table><tr>';
    		for($jour=1; $jour <= $nbj; $jour++): 
     
    		$ligne++;
    		$jours = mktime(0, 0, 0, date('n')+ $m, $jour);
     
    		if($ligne == 7)
    			{
    			$ligne = 0;
    			echo '</tr>';
    			}
    		else
    			{
    			echo '<td class="calendrier">'.date('j', $jours).'</td>';
    			}
     
    		endfor;
    		echo '</tr></table>';
    		}
    	else if($valeur == $ava)
    		{
                      //script similaire à la partie ci-dessus qui incrémente
                        }
    	}
    ?>

    voila j'espère que vous pourrez m'aider

  2. #2
    Membre chevronné
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2008
    Messages
    504
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 504
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    if($ligne == 7)
    			{
    			$ligne = 0;
    			echo '</tr>';
    			}
    		else
    			{
    			echo '<td class="calendrier">'.date('j', $jours).'</td>';
    			}
    Bhé déjà, il y a 1 jour par semaine qu'il t'affichera pas puisqu'il affiche un </tr> à la place... Sans tracer l'algo, ça peut déjà être une explication.
    De plus, dis toi que ton code HTML va être plein de </tr> associés à aucun <tr>

  3. #3
    Membre éclairé Avatar de xess91
    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    408
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 408
    Par défaut
    ah oui j'avais pas vu, c'est certain que c'est ça qui me fat disparaitre mon 28e jours au mois février, et sinon pour les années tu aurais une solution concernantle fait que je soit bloqué de dec08 à janv10?

    merci!

  4. #4
    Membre chevronné
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2008
    Messages
    504
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 504
    Par défaut
    au hasard, j'ajouterai l'année en 6e paramètre à

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $jours = mktime(0, 0, 0, date('n')+ $m, $jour);

  5. #5
    Membre éclairé Avatar de xess91
    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    408
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 408
    Par défaut
    merci pour la réponse mais je vois pas pourquoi ou "je comprend pas" car cette ligne me donne les jours dans le mois calculé ici:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $nbj=intval(date('t', $mois));
    c'est pas en rapport avec le mois et l'année qui sont mes repères.

  6. #6
    Membre chevronné
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2008
    Messages
    504
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 504
    Par défaut
    pour le coup, c'est moi qui ne voit pas le rapport entre lal igne qui te donne le nombre de jour dans le mois et le fait que tu sois bloqué entre dec08 et jan10...

  7. #7
    Membre éclairé Avatar de xess91
    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    408
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 408
    Par défaut
    DSL,

    si j'ai bien compris tu me conseils de rajouter à :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $jours = mktime(0, 0, 0, date('n')+ $m, $jour,$6eelement);
    un 6e element pour l'année. Mais cette ligne ce trouve dans mon for qui m'affiche les jours du mois calculé ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $mois = mktime(0, 0, 0, date('n', $time) - $m);
    echo date('m', $mois).'-'.date('Y', $mois);
    $nbj=intval(date('t', $mois));
    Le facteur directeur si je peux le nommé comme ça c'est "$mois" qui est créé à partir de la variable "$time" qui à pour valeur le le timestamp du mois et de l'année en affiché par ajax. C'est ici:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    //ici j'extrait le nombre de caractère qui m'intéresse dans la chaine envoyé par ajax (les mois année et jours sont envoyés, seul m'intéresse le mois et l'année)
    $extract = substr($moi, 0, 7);
    //ici j''extrait le mois
    $month = substr($extract, 0, 2);
    //ici l'année au finale ça me fait comme un explode
    $year = substr($extract, 3, 6);
    //ici je récupèrele timestamp du mois et de l'année affiché initialisé au premier jour du mois
    $time = strtotime('1-'.$month.'-'.$year);
    //ici c'est ma variable qui me permettra d'incrémenter ou de décrémenter
    $m=1;
    //et pour finir ici je crée un nouveau mois décrémenté du mois déjà affiché
    $mois = mktime(0, 0, 0, date('n', $time) - $m);
    Voila j'ai décortiqué mon script peut-être ça sera plus clair. Etant donné que à chaque mois précédent je génère son timestamp, je comprend pas pourquoi je suis bloqué à un moment du passé et un moment du futur

  8. #8
    Membre chevronné
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2008
    Messages
    504
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 504
    Par défaut
    Ok, peux tu être plus précis la dessus ?

    je peux faire défiler les mois et les années depuisdécembre 2008 jusqu'a janvier 2010 pas moin pas plus
    Qu'est ce qui t'empèche d'aller au dela ? ta liste va pas plus loin ? quand tu cliques sur aout 2008, il reste sur decembre 2008 ?

    Par ailleurs, rajouter l'année à mktime ne coute pas grand chose et permet d'etre sur de ce que l'on fait, même si je te l'accorde le problème ne vient probablement pas de là.

  9. #9
    Membre éclairé Avatar de xess91
    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    408
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 408
    Par défaut
    voila un petit shéma sommaire mais explicite! lol


  10. #10
    Membre chevronné
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2008
    Messages
    504
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 504
    Par défaut
    si tu veux mon avis, le problème n'est pas dans le code que tu nous montre mais plutot dans celui de tes boutons "mous suivant" et "mois precedent"...

    Il est probable que les parametres qu'il envoient soient foireux...

    Enfin du moins, je ne voit nul part dans ton code de variable globale (genre $_SESSION) où de procédures permettant de faire suivre ta "position" dans le temps...

    donc il faudrait que tu donnes un exemple des paramètres que tu reçoit quand tu cliques sur un bouton.

  11. #11
    Membre éclairé Avatar de xess91
    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    408
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 408
    Par défaut
    Dans les boutons il y a une foncion qui renvoie en argument l'url qu'ajax va appeleer plus une valeur "av" ou "ar" selon le sens plus un appel de contenu par document.getElementById.

    Le contenu retourner a php c'est les mois l'année et les jours.

    Ce qui donne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <td onclick="fonction ajax('scriptphp.php','av','id')">mois suivant</td>
    et à reception je recois deux valeurs:
    -la valeur "av"ou "ar"
    -et le contenu du <td id="id">qui contient les mois années et les jours</td>

    donc j'ai deux variable $_GET :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $_GET['categ'] AND $_GET['moi']
    $_GET['categ'] vaut soit "av" ou "ar" pour déterminer le sens.
    $_GET['moi']vaut les mois, l'année et les jours soit =>
    042009010203040506070809101112131415161718190......etc.....

    et la on retombe dans mon script php expliqué ci-dessus avec le principe "explode" par "substr".

    Voila je ne pas en dire plus tout le fonctionnement de mes scripts est décrit précisément.

  12. #12
    Membre chevronné
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2008
    Messages
    504
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 504
    Par défaut
    whaouuuuu...

    En général, je m'abstient d'inviter à quelqu'un d'utiliser une clef a molette quand il demande comment visser un boulon avec un marteau, mais pour le coup, je vais quand même te demander ce qui t'empêche de faire plus simple que ça...

    Alors pourquoi ne pas plutôt utiliser les sessions plutot que cette méthode bancale ?

    Genre sur ta page scriptphp.php, pourquoi ne pas tout simplement te faire une variable de session $_SESSION['current_time'] que tu initalises à mktime(0, 0, 0, date('n'), date('j'), date('Y')), et en fonction de 'av' ou 'ar', tu fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $_SESSION['current_time'] = mktime(0, 0, 0, 
                       date('n', $_SESSION['current_time'])+ $_GET['categ'] == 'av' ? 1 : -1, 
                       date('j', $_SESSION['current_time']) , 
                       date('Y', $_SESSION['current_time']), 
    );
    puis utiliser ensuite $_SESSION['current_time'] comme point de départ de ton calendrier ?

    Ensuite, si pour x ou y raison tu ne veux pas utiliser les session, tu peux aussi rajouter dans scriptphp.php un <inputtype="hidden" id="current_date" value="ta_date_courrante"> et faire ton appel ajax à partir de la valeur contenue la dedans...

  13. #13
    Membre éclairé Avatar de xess91
    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    408
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 408
    Par défaut
    merci de ta réponse je ne cache pas que j'ai jamais utilisé le système de session je vais pencher sur le cas mais ça ne m'explique toujours pas pourquoi je ne peux pas remonter dans le temps jusqu' a l'an 2000 par exemple et aller jusqu'en 2025.

  14. #14
    Membre éclairé Avatar de xess91
    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    408
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 408
    Par défaut
    Bonjour,

    je reviens avec un nouveaux test qui me donne d'ou vient le problème. mais malgrès avoir isolé la partie qui m'ennuie je ne parvient pas à trouver le pourquoi du comment. Est-ce la fonction php qui a des limites ?

    Voila mon script tout est commenté et le script fonctionne vous pouvez le tester:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
    Erreur ci-dessous:
    <br />
    <br />
    <?php
    ////////////////////Script Erreur///////////////////////
    		//timestamp du mois de décembre 2008
    		$time = 1229554800;
    		//à pour valeur 12-2008
    		echo date('m', $time).'-'.date('Y', $time);
    		//variable pour décrémenter
    		$m=1;
    		//création du timestamp de novembre 2008 c'est ici d'ou vient l'erreur
    		$mois = mktime(0, 0, 0, date('n', $time) - $m);
    		//cette echo me donne pour résultat 11-2009. j'attendais en résultat 11-2008
    		echo '////'.date('m', $mois).'-'.date('Y', $mois);
    ?>
    <br />
    <br />
    Même script avec mois différent marche bien:
    <br />
    <br />
    <?php
    ////////////////////Même script avec un mois de départ différent sans erreur//////////////////
    		//timestamp du mois de février 2009
    		$time = 1234911600;
    		//à pour valeur 02-2009
    		echo date('m', $time).'-'.date('Y', $time);
    		//variable pour décrémenter
    		$m=1;
    		//création du timestamp de janvier 2009
    		$mois = mktime(0, 0, 0, date('n', $time) - $m);
    		//cette echo me donne pour résultat 01-2009. j'attendais en résultat 01-2009 c'est OK
    		echo '////'.date('m', $mois).'-'.date('Y', $mois);
    ?>
    Merci par avance pour vos aides!

  15. #15
    Membre chevronné
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2008
    Messages
    504
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 504
    Par défaut
    Je suis désolé d'insister, mais rajoute ton années de référence à ton mktime en 6e paramètre.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $mois = mktime(0, 0, 0, date('n', $time) - $m, 2009);
    A défaut d'avoir une autre réponse, j'aimerai être fixé sur ce point avant de pousser l'investigation !

  16. #16
    Membre éclairé Avatar de xess91
    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    408
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 408
    Par défaut
    non ça manène à 2014 !

  17. #17
    Membre chevronné
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2008
    Messages
    504
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 504
    Par défaut
    ok, essayes ça alors :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $mois = mktime(0, 0, 0, date('n', $time)*1 - $m, 2009);

  18. #18
    Membre éclairé Avatar de xess91
    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    408
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 408
    Par défaut
    année 2015! essai avant de poster stp ou sinon peux-tu m'expliquer ta démarche.

  19. #19
    Membre chevronné
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2008
    Messages
    504
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 504
    Par défaut
    en fait, il m'est déjà arrivé d'avoir des problemes avec la fonction mktime() qui ne reconnait pas la sortie de date() comme un numérique et me sort des résultats bidon.

    faire un *1 force en quelque sorte a sortir un résultat numérique (on aurait pu faire intval aussi).

    En fait, en relisant, je me rend compte que l'année vient en 5e parametre, il fallait donc lire

    $mois = mktime(0, 0, 0, date('n', $time) - $m, 1, 2009);

    Ensuite, je ne peux pas tester tous les problèmes auquel je répond ! Je ne peux pas créer un nouveau proj a chaque fois que je veux tester le problème d'un autre !

    enfin, pour répondre à ton problème, une fois les problèmes habituels écarté, je préfère faire tourner l'algo de tete, et la je vois bien que le problème de l'année n'y est pas pour rien !

    car si je spécifie bien tous les parametres de mktime() en utilisant le temps de référence :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $mois = mktime(0, 0, 0, date('n', $time) - $m, 1, date("Y", $time));
    et bhé ça marche ! j'ai été un peu vite en proposant 2009 ayant cru que $time était en 2009, mais c'était en 2008. Il ne faut pas uniquement compter sur nous et ne pas avoir peur d'explorer les pistes qu'on propose !

  20. #20
    Membre éclairé Avatar de xess91
    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    408
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 408
    Par défaut
    merci comode,

    effectivement ça marche, jusqu'a combien de paramètre je me mettre et si je fais ça aussi pour les jours ça sera que mieux non !

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Moment.js : un couteau suisse pour manipuler les dates
    Par FirePrawn dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 15/04/2013, 14h57
  2. PHP pour manipuler les dates
    Par esteban0013 dans le forum Langage
    Réponses: 4
    Dernier message: 05/10/2011, 14h46
  3. [Dates] Fonction pour afficher les dernières news
    Par Justone22 dans le forum Langage
    Réponses: 23
    Dernier message: 04/08/2008, 23h57
  4. fonction pour lire les fichier audio
    Par tarek007 dans le forum Multimédia
    Réponses: 1
    Dernier message: 11/05/2005, 17h28
  5. Réponses: 2
    Dernier message: 04/09/2004, 11h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo