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] Calcul du nombre de jours entre 2 dates


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Inscrit en
    Octobre 2006
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 34
    Points : 16
    Points
    16
    Par défaut [Dates] Calcul du nombre de jours entre 2 dates
    Bonjour,
    Je ne trouve pas de fonctions en PHP qui permette de calculer le nombre de jours séparant 2 dates.
    Existe t-elle (la fonction) ou faut il se la créer ?

  2. #2
    Membre émérite
    Avatar de Nesmontou
    Homme Profil pro
    Architecte logiciel
    Inscrit en
    Septembre 2004
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Architecte logiciel
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2004
    Messages : 1 612
    Points : 2 969
    Points
    2 969
    Par défaut
    Salut, merci de regarder dans la FAQ avant de poster
    http://php.developpez.com/faq/?page=...ate_difference
    Si vous ne pouvez expliquer un concept à un enfant de six ans, c'est que vous ne le comprenez pas complètement. Albert EINSTEIN

    F.A.Q. : Java, PHP, (X)HTML / CSS

    N'oubliez pas de cliquer sur le bouton Résolu en bas de page quand vous avez obtenu une solution à votre problème

  3. #3
    Membre du Club
    Inscrit en
    Juillet 2006
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 70
    Points : 63
    Points
    63
    Par défaut
    La fonction de la FAQ ne fonctionne pas avec les changements horaires...

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Pourrais-tu donner un cas qui ne fonctionne pas comme tu le voudrais ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre du Club
    Inscrit en
    Juillet 2006
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 70
    Points : 63
    Points
    63
    Par défaut
    Voici le problème avec le changement horaire du 26 ou 27 octobre.

    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
     
    <?php
    //Définition des date au format jour-mois-année
    $date1 = "20-10-2008"; 
    $date2 = "30-10-2008";
     
    //Extraction des données
    list($jour1, $mois1, $annee1) = explode('-', $date1); 
    list($jour2, $mois2, $annee2) = explode('-', $date2);
     
    //Calcul des timestamp
    $timestamp1 = mktime(0,0,0,$mois1,$jour1,$annee1); 
    $timestamp2 = mktime(0,0,0,$mois2,$jour2,$annee2); 
    echo abs($timestamp2 - $timestamp1)/86400; //Affichage du nombre de jour : 10.0416666667 au lieu de 10
    ?>

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Il y a juste a faire l'arrondi.
    Il n'y a pas de réelle methode simple pour gérer ça proprement.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  7. #7
    Membre du Club
    Inscrit en
    Juillet 2006
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 70
    Points : 63
    Points
    63
    Par défaut
    Il faudrait alors le préciser dans la FAQ cela évitera à certain de faire des erreurs et de ne pas comprendre d'où vient l'erreur.
    Par contre je ne sais pas comment éditer la FAQ ou faire modifier la FAQ.

  8. #8
    Membre expérimenté

    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 060
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 060
    Points : 1 357
    Points
    1 357
    Par défaut
    Bonjour,

    Le code ci-dessous semble fonctionner correctement :
    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
    <?php
      function TSDate($date)
      {
        $laDate = new DateTime($date);
        $offset = ($laDate -> getOffset());
        $decalage = ($offset < 0) ? $offset . ' seconds' : '+' . $offset . ' seconds';
        $laDate -> modify($decalage);
     
        return $laDate -> format('U');
      }
    //----------------------------------------------------------------------------
    //----------------------------------------------------------------------------
      $dateDeb = '20-10-2008'; 
      $dateFin = '30-10-2008';
     
      $debut = TSDate($dateDeb);
      $fin = TSDate($dateFin);
      $ecart = abs($fin - $debut) / 86400;
     
      echo 'écart du ' . $dateDeb . ' au ' . $dateFin . ' : ' . $ecart . ' jour(s)';
    ?>
    Je l'ai testé avec succès, sur différent fuseaux horaires.

    L'objet 'DateTime' et ses méthodes associées existent depuis PHP 5.1. Elles permettent en outre de travailler sur des dates très largement inférieures a l'EPOC.

    Un tutoriel se trouve ici :
    http://julien-pauli.developpez.com/tutoriels/php/dates/

  9. #9
    Membre actif
    Inscrit en
    Juin 2006
    Messages
    584
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 584
    Points : 235
    Points
    235
    Par défaut
    Un code qui fonctionne bien, on arrondi au supèrieur ou infèrieur pour le changement d'heure.

    Code php : 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
     
    function NbJours($debut, $fin) {//Nombre de jour entre 2 date
     
      $tDeb = explode("-", $debut);
      $tFin = explode("-", $fin);
     
      $diff = mktime(0, 0, 0, $tFin[1], $tFin[2], $tFin[0]) - 
              mktime(0, 0, 0, $tDeb[1], $tDeb[2], $tDeb[0]);
     
     
      if(intval($tDeb[1]) >= 7)
      {
     	return abs(floor((($diff / 86400)+1)));
      }
      elseif(intval($tDeb[1]) < 7)
      {
    	return abs(ceil((($diff / 86400)+1)));  
      }
      else
      {
    	echo "Problème pour calculer le nombre de jours";
    	exit;
      }
     
    }

Discussions similaires

  1. Calcul du nombre de jours entre 2 date
    Par djso3 dans le forum Général VBA
    Réponses: 3
    Dernier message: 06/11/2009, 09h29
  2. [V5] (BO v5.1.3) Calcul du nombre de jours entre 2 dates
    Par POLUX13 dans le forum Deski
    Réponses: 4
    Dernier message: 09/02/2009, 22h17
  3. Calcul du nombre de jours entre plusieurs dates
    Par pcl73 dans le forum Access
    Réponses: 6
    Dernier message: 06/03/2007, 21h16
  4. [Dates] calcul du nombre de jours entre 2 dates
    Par lilie62 dans le forum Langage
    Réponses: 5
    Dernier message: 22/11/2006, 15h55
  5. calcule du nombre de jours entre 2 dates
    Par nazimb dans le forum ASP
    Réponses: 4
    Dernier message: 28/09/2004, 15h22

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