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 :

calcul avec mktime


Sujet :

Langage PHP

  1. #1
    Membre expérimenté Avatar de shkyo
    Homme Profil pro
    Développeur Robotique - Administrateur systèmes
    Inscrit en
    Juin 2003
    Messages
    841
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur Robotique - Administrateur systèmes

    Informations forums :
    Inscription : Juin 2003
    Messages : 841
    Points : 1 474
    Points
    1 474
    Par défaut calcul avec mktime
    Bonjour,

    J'ai un symptôme étrange (enfin pour moi), je fais des calculs sur des dates (j'ajoute 1 jour à chaque fois), donc j'utilise la fonction "mktime" pour faire les calculs en seconde.
    Cela semble fonctionner, mais quand je pars du 01/10/2008, arrivé au 26/10/2008, il n'incrémente plus et reste au 26/10/2008 !!!

    Voici mon code :

    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
    function calcul_axe_x($tableau,$nb_j,$date_1)
    {
    	global $tableau;
    	$format="d/m/Y";
     
    	$nb_h=$nb_j*24;
    	$date_tmp1=explode("/",$date_1);
     
    	$tableau[0]=$date_tmp1[0].'/'.$date_tmp1[1].'/'.$date_tmp1[2];
    	$val_1=mktime(0,0,0,$date_tmp1[1],$date_tmp1[0],$date_tmp1[2]);
    	$val_1=$val_1+86400.0;
     
    	$date_1=date($format,$val_1);
    	$date_tmp1=explode("/",$date_1);
     
    	for($i=1;$i<=$nb_h;$i++)
    	{
    		if (($i%24)==0)
    		{
    			$tableau[$i]=$date_tmp1[0].'/'.$date_tmp1[1].'/'.$date_tmp1[2];
    			$val_1=mktime(0,0,0,$date_tmp1[1],$date_tmp1[0],$date_tmp1[2]);
    			$val_1=$val_1+86400.0;
    			$date_1=date($format,$val_1);
    			$date_tmp1=explode("/",$date_1);
    		} else {
    			$tableau[$i]=null;
    		}
    	}
    	return $tableau;
    }
    Je suis peut-être myope, mais je ne vois pas où est le problème...

    Merci d'avance de vos réponses/suggestions.

  2. #2
    Membre régulier
    Inscrit en
    Novembre 2004
    Messages
    151
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Novembre 2004
    Messages : 151
    Points : 106
    Points
    106
    Par défaut
    Il y a un bug dans php au niveau du passage de l'heure d'hiver à l'heure d'été
    Et il reste bloqué où tu viens de dire ... Si tu avances en seconde

    L'heure d'été et d'hiver est pas la même en France qu'aux states

  3. #3
    Membre expérimenté Avatar de shkyo
    Homme Profil pro
    Développeur Robotique - Administrateur systèmes
    Inscrit en
    Juin 2003
    Messages
    841
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur Robotique - Administrateur systèmes

    Informations forums :
    Inscription : Juin 2003
    Messages : 841
    Points : 1 474
    Points
    1 474
    Par défaut
    Citation Envoyé par AsQuel Voir le message
    Il y a un bug dans php au niveau du passage de l'heure d'hiver à l'heure d'été
    Et il reste bloqué où tu viens de dire ... Si tu avances en seconde

    L'heure d'été et d'hiver est pas la même en France qu'aux states
    ARGH !!! Et comment peut-on contourner ce bug ? Car pour les calculs sur les dates, je ne vois pas trop comment faire, sinon...

  4. #4
    Membre régulier
    Inscrit en
    Novembre 2004
    Messages
    151
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Novembre 2004
    Messages : 151
    Points : 106
    Points
    106
    Par défaut
    Cette solution marche mais je sais plus pourquoi lol

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $tab = explode("-",$date_du_jour);
    $annee = $tab[0];
    $mois = $tab[1];
    $jour = $tab[2];
    echo 'Heure depart format : '.$date_du_jour.'<br/>';
    $timeS = mktime(0,0,0,$mois,$jour,$annee);
    echo 'Heure depart : '.$timeS.'<br/>';
    $timeS += 93600;
    echo 'Heure apres :'.$timeS.'<br/>';
    $date_du_jour = date("Y-m-d",$timeS);
    (Essaye tu me diras)

  5. #5
    Membre expérimenté Avatar de shkyo
    Homme Profil pro
    Développeur Robotique - Administrateur systèmes
    Inscrit en
    Juin 2003
    Messages
    841
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur Robotique - Administrateur systèmes

    Informations forums :
    Inscription : Juin 2003
    Messages : 841
    Points : 1 474
    Points
    1 474
    Par défaut
    Je viens d'avoir une idée lumineuse et qui fonctionne !!!

    Au lieu de ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $val_1=mktime(0,0,0,$date_tmp1[1],$date_tmp1[0],$date_tmp1[2]);
    $val_1=$val_1+86400.0;
    J'ai fais cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $val_1=mktime(0,0,0,$date_tmp1[1],$date_tmp1[0]+1,$date_tmp1[2]);
    Et ça marche !!!

    Merci quand même de ta réponse, mais c'est bizarre ce 93600 dans le calcul, ça correspond à 26h...

  6. #6
    Membre régulier
    Inscrit en
    Novembre 2004
    Messages
    151
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Novembre 2004
    Messages : 151
    Points : 106
    Points
    106
    Par défaut
    exacccctttt
    je viens de me rappeler

    comme date("") converti en jour même si il est 2h du matin, pour passer le prob' de l'heure d'hiver, j'ai avancé tous les jours de 26h et non 24.

    (Oue bon ok ... mais ca marche :p)

    (parceque ton truc , je suis pas sur que ca marche en fin de mois ... ou sur les années bisect...)

  7. #7
    Membre expérimenté Avatar de shkyo
    Homme Profil pro
    Développeur Robotique - Administrateur systèmes
    Inscrit en
    Juin 2003
    Messages
    841
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur Robotique - Administrateur systèmes

    Informations forums :
    Inscription : Juin 2003
    Messages : 841
    Points : 1 474
    Points
    1 474
    Par défaut
    Ben à priori, je dirais que ça marche sur les années bissextiles, car le calcul à lieu dans le "mktime" lui-même qui tient compte de la validité des dates avant de transformer, d'après ce que j'en sais...

  8. #8
    Membre régulier
    Inscrit en
    Novembre 2004
    Messages
    151
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Novembre 2004
    Messages : 151
    Points : 106
    Points
    106
    Par défaut
    comme ca t'as deux solutions

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Dates] Erreur de calcul avec la fonction mktime ?
    Par Xpertfly dans le forum Langage
    Réponses: 1
    Dernier message: 18/11/2008, 11h40
  2. Erreurs calculs avec mktime
    Par Sandara dans le forum Langage
    Réponses: 11
    Dernier message: 28/06/2006, 15h23
  3. Temps de calcul avec deux écrans
    Par Shaga dans le forum OpenGL
    Réponses: 2
    Dernier message: 14/11/2005, 09h24
  4. Faire du calcul avec la valeur d'un élément/attribut
    Par camboui dans le forum XML/XSL et SOAP
    Réponses: 4
    Dernier message: 03/11/2005, 16h10
  5. Réponses: 2
    Dernier message: 22/03/2004, 10h50

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