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

EDI, CMS, Outils, Scripts et API PHP Discussion :

écart entre 2 dates fonctionne pas toujours


Sujet :

EDI, CMS, Outils, Scripts et API PHP

  1. #1
    Membre confirmé
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2010
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2010
    Messages : 105
    Par défaut écart entre 2 dates fonctionne pas toujours
    Bonjour,

    j'ai un bout de code qui me calcule la différence entre 2 dates jour de début et fin inclus. Je l'utilise depuis 8 mois sans problème et là je n'y comprend rien, le 28 mars n'est pas compté suivant sa position début, fin ou milieu de période).

    Différence entre 26-03-2011 et 27-03-2011 = 2 jours ce qui est normal
    Différence entre 27-03-2011 et 28-03-2011 = 1jours il manque un jour on devrait avoir 2jours
    Différence entre 28-03-2011 et 29-03-2011 = 2 jours ce qui est normal
    Différence entre 26-03-2011 et 29-03-2011 = 3jours il manque un jour on devrait avoir 4jours

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    $debut_garde='2011-03-27';
    $fin_garde='2011-03-28';
     
    $debut_garde_ex = explode('-',$debut_garde);	//je recupère le jour, mois et année	
    $time_dg = mktime(0, 0, 0, $debut_garde_ex[1], $debut_garde_ex[2], $debut_garde_ex[0]); // passe en secondes debut_garde		
     
    $fin_garde_ex = explode('-',$fin_garde);	//récupère le jour, mois et année	
    $time_fg = mktime(0, 0, 0, $fin_garde_ex[1], $fin_garde_ex[2], $fin_garde_ex[0]); // passe en secondes fin_garde
     
    $ecart = $time_fg - $time_dg+86400; //différence fin_garde - début_garde + un jour
    $ecart_jour_garde = floor($ecart/3600/24); // conversion en jours
    echo $ecart_jour_garde;

    Quelqu'un à une solution ou idée pour ce 28 mars, je suis preneur.

    Merci

  2. #2
    Expert confirmé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 418
    Par défaut
    Ce serait pas dû au passage à l'heure d'été ?

  3. #3
    Membre confirmé
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2010
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2010
    Messages : 105
    Par défaut
    c'est une idée mais le passage se fait dans la nuit du 26 au 27 mars et c'est le 28 mars qui me semble ne pas être compté.
    De plus le passage change l'heure que de 1 heure et moi il me manque 1 jour entier. Faut que je trouve une solution pour y remédier.

  4. #4
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    utilise date_diff, un jour c'est pas forcement 24h
    de plus le explode + mktime est inutile, utilise strtotime

  5. #5
    Membre confirmé
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2010
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2010
    Messages : 105
    Par défaut
    L'erreur vient bien du changement d'heure, entre le 27 mars et le 28 mars il manque 3600 secondes soit une heure et comme j'utilise floor et que floor arrondie à l'entier inférieur......... on à l'erreur.
    Pour le moment j'ai fait +3600 ce qui résout le problème temporairement. C'est pas beau mais pour le moment ca fonctionne.

    merci pour l'aide.

  6. #6
    Expert confirmé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 418
    Par défaut
    Si tu as php >= 5.3 la méthode "date_diff" qu'indique stealth35 est de loin la plus simple pour résoudre ce pb.
    Sinon si tu récupères tes dates depuis une bdd il y a aussi DATEDIFF depuis MySQL 4.1

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

Discussions similaires

  1. GetAsyncKeyState ne fonctionne pas toujours
    Par Jeannot dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 15/09/2007, 12h48
  2. [VB 6] MoveWindow ne fonctionne pas toujours
    Par ConsultantTI dans le forum VB 6 et antérieur
    Réponses: 12
    Dernier message: 04/06/2007, 10h15
  3. Réponses: 1
    Dernier message: 10/04/2007, 22h27
  4. [VBA-E] Calculs d'écarts entre 2 dates
    Par harpic dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 04/12/2006, 16h48
  5. [CSS] a:active ne fonctionne pas toujours ?
    Par KpTn dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 10/05/2006, 17h25

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