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 :

fonction date et dernier jour de l'année


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Resp Informatique
    Inscrit en
    Novembre 2010
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Resp Informatique

    Informations forums :
    Inscription : Novembre 2010
    Messages : 8
    Par défaut fonction date et dernier jour de l'année
    Bonjour,

    Le code suivant semble avoir un comportement qui ne correspond pas au comportement attendu.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    echo  date("Y-m-d") ;// aujourd'hui 31 décembre 2914
    echo date("Y-m-d",  strtotime("-1 month")); // retourne 2014-12-01 ???
    echo date("Y-m-d",  strtotime("-2 month")); // correct retourne bien 2014-10-31
    J'aimerais bien conserver cette méthode très pratique pour définir des intervalles mais est-elle fiable ?

    il y a t-il d'autres anomalies que celle du 31 décembre, à moins que je fasse une erreur.


    Merci par avance et meilleurs vœux à tous pour l'année 2015

    Michel

  2. #2
    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
    Par défaut
    Le 31 novembre n'existe pas donc tu passes au 1er décembre.
    Il n'y a pas de bonne réponse à ce que tu veux faire, c'est à toi de définir les régles. Par exemple -1 mois du 31 mars c'est quoi ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre averti
    Profil pro
    Resp Informatique
    Inscrit en
    Novembre 2010
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Resp Informatique

    Informations forums :
    Inscription : Novembre 2010
    Messages : 8
    Par défaut
    Citation Envoyé par sabotage Voir le message
    Le 31 novembre n'existe pas donc tu passes au 1er décembre.
    Il n'y a pas de bonne réponse à ce que tu veux faire, c'est à toi de définir les régles. Par exemple -1 mois du 31 mars c'est quoi ?
    Merci pour cette réponse pertinente mais je précise un peu plus ma remarque, en fait c'est le mois précédent à la date en cours que je recherche.

    De fait, la réponse à -1 mois du 31 mars devrait être "février", de même que celle évoquée pour le 31 décembre qui devrait être en toute logique "novembre"

    C'est pour essayer d'obtenir cette valeur que mon code effectif est.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo date("m",  strtotime("-1 month"));

    Ce qui manifestement est une mauvaise solution

  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
    Par défaut
    Il faut le faire "à la main" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    date('n') == 1 ? 12 : date('n') - 1;
    Voir aussi les tutoriels et cours de formation pour apprendre PHP : http://php.developpez.com/cours/
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre averti
    Profil pro
    Resp Informatique
    Inscrit en
    Novembre 2010
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Resp Informatique

    Informations forums :
    Inscription : Novembre 2010
    Messages : 8
    Par défaut
    effectivement c'est encore plus simple !

    Un grand merci !

  6. #6
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Salut,

    tu vas te heurter à d'autres problèmes (aux alentours de février par exemple).
    Le code de sabotage est plus simple mais pas suffisant.
    Tu dois mieux utiliser les formats relatifs des dates qui sont très puissants en PHP
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    $year  = 2014;
    $month = 12;
    $minus = 3;
     
    $day = new DateTime('2014-12-31');
    if ($day == new DateTime("last day of {$year}-{$month}")) {
        $day->modify("last day of -{$minus} month");
    }
    else
    {
        $day->modify("-{$minus} month");
    }

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 26/09/2007, 15h38
  2. Réponses: 2
    Dernier message: 16/07/2007, 12h52
  3. [Dates] Fonction date: ajouter 3 jours à une date
    Par bobic dans le forum Langage
    Réponses: 8
    Dernier message: 12/03/2007, 11h05

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