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

PHP & Base de données Discussion :

soustraction entre 2 date


Sujet :

PHP & Base de données

  1. #1
    Membre éclairé
    Homme Profil pro
    Analyse système
    Inscrit en
    Mars 2011
    Messages
    444
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Mars 2011
    Messages : 444
    Par défaut soustraction entre 2 date
    Bonjour,
    j'ai 2 date et je veux récupéré les nombre de jours:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $a='10-07-2011';
    $b='13-10-2011';
    merci d'avance ??

  2. #2
    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
    T'as quelle version de PHP ?

  3. #3
    Expert confirmé
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Par défaut
    Hello

    Compare les timestamp et divise le tout par 24*3600.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $a='10-07-2011';
    $b='13-10-2011';
     
    list($d,$m,$y) = explode('-', $a);
    $ta = mktime(0,0,0, $m, $d,$y);
     
    list($d,$m,$y) = explode('-', $b);
    $tb = mktime(0,0,0, $m, $d,$y);
     
    echo "Il y a " . ceil(($tb - $ta) / 86400) . " jours entre $a et $b";
    Si tu peux avoir les dates dans un format compatible avec strtotime c'est mieux, ça évite de devoir créer les timestamps manuellement avec mktime.

    Tu peux aussi jouer avec DateTime::diff (PHP 5.3).

  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
    un jour c'est pas forcement 24h donc ça ne marche pas

  5. #5
    Expert confirmé
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Par défaut
    En effet, j'avais oublié le coup des heures été / hiver.

    Bon sinon y'a des solutions pour PHP < 5.3 sur cette page: http://www.php.net/manual/en/function.date-diff.php

  6. #6
    Membre éclairé
    Homme Profil pro
    Analyse système
    Inscrit en
    Mars 2011
    Messages
    444
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Mars 2011
    Messages : 444
    Par défaut
    Bonjour,
    je suis sous php 5.2.6

  7. #7
    Membre éclairé
    Homme Profil pro
    Analyse système
    Inscrit en
    Mars 2011
    Messages
    444
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Mars 2011
    Messages : 444
    Par défaut
    merci pour votre aide la solution est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo $nbjours = round((strtotime($b) - strtotime($a))/(60*60*24));

  8. #8
    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
    Citation Envoyé par benhsaien Voir le message
    merci pour votre aide la solution est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo $nbjours = round((strtotime($b) - strtotime($a))/(60*60*24));
    c'est pareil elle est fausse, ça ne prend pas compte les changements d'heure, lis bien le lien de Benjamin

  9. #9
    Membre éclairé
    Homme Profil pro
    Analyse système
    Inscrit en
    Mars 2011
    Messages
    444
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Mars 2011
    Messages : 444
    Par défaut
    bah je l'est tester plusieurs fois et les résultats sont fiable . parce que pour mon cas je ne prend pas l'heure en considération seulement les date jour mois et l’année.

  10. #10
    Expert confirmé
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Par défaut
    ça ne change rien. Tu t'expose à un bug car tu ne tiens pas compte des changements d'horaires été / hiver (en vigueur dans la plupart des pays).

    comme disait Stealth, tous les jours ne font pas 24h du coup, or tu les divise par 24*3600.

  11. #11
    Membre éclairé
    Homme Profil pro
    Analyse système
    Inscrit en
    Mars 2011
    Messages
    444
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Mars 2011
    Messages : 444
    Par défaut
    donc la meilleure solution est ??? un exemple se sera parfait.merci

  12. #12
    Expert confirmé
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Par défaut
    Comme mentionné plus haut: il y a plein de solution élégantes par ici http://www.php.net/manual/en/function.date-diff.php

    Par exemple:
    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
    <?php
            function dateDifference($startDate, $endDate)
            {
                $startDate = strtotime($startDate);
                $endDate = strtotime($endDate);
                if ($startDate === false || $startDate < 0 || $endDate === false || $endDate < 0 || $startDate > $endDate)
                    return false;
     
                $years = date('Y', $endDate) - date('Y', $startDate);
     
                $endMonth = date('m', $endDate);
                $startMonth = date('m', $startDate);
     
                // Calculate months
                $months = $endMonth - $startMonth;
                if ($months <= 0)  {
                    $months += 12;
                    $years--;
                }
                if ($years < 0)
                    return false;
     
                // Calculate the days
                            $offsets = array();
                            if ($years > 0)
                                $offsets[] = $years . (($years == 1) ? ' year' : ' years');
                            if ($months > 0)
                                $offsets[] = $months . (($months == 1) ? ' month' : ' months');
                            $offsets = count($offsets) > 0 ? '+' . implode(' ', $offsets) : 'now';
     
                            $days = $endDate - strtotime($offsets, $startDate);
                            $days = date('z', $days);   
     
                return array($years, $months, $days);
            }
    ?>

Discussions similaires

  1. Effectue une soustraction entre deux dates
    Par messi1987 dans le forum Développement
    Réponses: 2
    Dernier message: 05/03/2015, 14h22
  2. soustraction entre deux dates
    Par viny dans le forum Requêtes
    Réponses: 2
    Dernier message: 05/12/2009, 16h37
  3. soustraction entre deux dates en java
    Par zekabyle dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 12/04/2007, 12h12
  4. Soustraction entre deux dates
    Par Jayceblaster dans le forum Delphi
    Réponses: 8
    Dernier message: 17/02/2007, 13h10
  5. Soustraction entre deux dates
    Par franculo_caoulene dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 20/01/2006, 10h59

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