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 :

Opérations sur les dates (calculs)


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Opérations sur les dates (calculs)
    Bonjour,

    Pour une application, j'ai besoin d'effectuer des opérations relativement simples sur des dates (soustraction/addiction de mois, de jours, ou d'année).

    Voici la méthode la plus simple que j'ai trouvée:

    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $date= "2010-07-20";
    echo 'ancienne date : '.$date.'<br />';
    $date= date("Y-m-d", strtotime($date." + 3 days + 2 months + 1 year"));
    echo 'nouvelle date : '.$date;

    Qui semble fonctionner vue la sortie :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ancienne date : 2010-07-20
    nouvelle date : 2011-09-23
    Dans le doute, j'ai testé la gestion des années bissextiles :
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    // Année bissextile
    $date = "2012-02-28";
    echo 'ancienne date (année bissextile) : '.$date.'<br />';
    $date = date("Y-m-d", strtotime($date." + 1 day"));
    echo 'date + 1 jour (année bissextile): '.$date.'<br />';
     
    // Année non bissextile
    $date = "2013-02-28";
    echo 'ancienne date (année non bissextile) : '.$date.'<br />';
    $date = date("Y-m-d", strtotime($date." + 1 day"));
    echo 'date + 1 jour (année non bissextile): '.$date.'<br />';

    Retourne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ancienne date (année bissextile) : 2012-02-28
    date + 1 jour (année bissextile): 2012-02-29
    ancienne date (année non bissextile) : 2013-02-28
    date + 1 jour (année non bissextile): 2013-03-01
    Evidement, ça fonctionne puisqu'on utilise date(), mais ça me semble trop facile, est-ce vraiment fiable ?

  2. #2
    Membre confirmé
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2009
    Messages
    195
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2009
    Messages : 195
    Par défaut
    Bonjour
    Je l'utilise sur une de mes applications et avec un code similaire
    Je n'est pour le moment jamais eu de soucis
    A confirmer

  3. #3
    Invité
    Invité(e)
    Par défaut
    Merci.

    A force de jouer avec, j'ai trouvé ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $date = "2010-11-31"; // le 31 novembre, ça n'existe pas.
    echo 'ancienne date : '.$date.'<br />';
    $date = date("Y-m-d", strtotime($date." + 1 day"));
    echo 'nouvelle date : '.$date.'<br />';
    qui me donne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ancienne date : 2010-11-31
    nouvelle date : 2010-12-02
    nouvelle date +1 : 2010-12-03
    Ce n'est pas vraiment grave puisque le calcul est bon. Mais c'est bizarre non ?

    La fonction date() doit vérifier que le jour est bien compris entre 00 et 31. (je viens aussi de m'apercevoir que ça fonctionne avec une date peut-être du type 2010-07-00)

    Mon script controle à plusieurs moment les dates avant de les traiter, personnellement ça ne devrait pas poser de problème. Mais je trouve ça curieux.

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    397
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 397
    Par défaut
    Si tu fais attention, tu n'auras jamais en entrée une date qui n'existe pas...

    Pourquoi tester ça?

    Si tu testes bien tes dates quand quelqu'un les rentre dans un formulaire...ce problème ne peut pas arriver...

    C'est comme de mettre une brique dans un mixer et s'étonner que ca ne fonctionne pas...

    Ce n'est pas le but de l'outil, donc non ça ne marche pas.

    P.S : Le fonctionnement que tu décris est expliqué sur la documentation php de la fonction date(). Donc je dis ça mais en plus ils ont prévu que quelqu'un pourrait l'utiliser comme toi. Ils sont forts...

  5. #5
    Invité
    Invité(e)
    Par défaut
    zut j'ai édité mon message entre deux

    Comme je l'ai dit ça ne devrais pas poser de problème. Je suis juste curieux, je teste à tout va

    Edit : Effectivement c'est dans les contributions de la doc.

    Je sais que ce ne sont pas des anomalies, surtout que le comportement est bien connu (les codes proposés dans les contributions de la doc comportent souvent une partie qui se charge de gérer le nombre de jours dans chaque mois.

    Ca le fait aussi pour la soustraction de mois :
    • si je soustrait un mois à un mois de 31 jours (31 decembre - 1 mois) ça me renvoie le premier jour de ce mois (01 decembre)
    • plus gênant: si on soustrait un mois à la date 2010-03-31 ça renvoie 2010-03-03.
    Dernière modification par Invité ; 20/07/2010 à 17h31.

  6. #6
    Membre chevronné
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    397
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 397
    Par défaut
    Par ailleurs, je viens de lire, que la documentation conseille d'utiliser la fonction date dans une fonction mktime, pour les calculs sur les dates, cela pour éviter des problèmes aux changements d'heures (heure d'été-heure d'hiver)

    Ca te fait un truc de plus à tester.

    Bonne continuation

Discussions similaires

  1. Opérations sur les dates
    Par coyotte507 dans le forum Contribuez
    Réponses: 12
    Dernier message: 07/03/2007, 14h32
  2. Opération sur les dates
    Par alainGL dans le forum Access
    Réponses: 2
    Dernier message: 07/03/2007, 09h27
  3. Opération sur les dates
    Par obily dans le forum Algorithmes et structures de données
    Réponses: 19
    Dernier message: 19/01/2007, 15h30
  4. opération sur les dates
    Par AMARI_SALIM dans le forum Langage
    Réponses: 14
    Dernier message: 19/07/2006, 19h05
  5. opérations sur les dates
    Par coucoucmoi dans le forum Débuter
    Réponses: 2
    Dernier message: 12/08/2003, 12h45

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