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] Incrémenter une date jour par jour dans une boucle


Sujet :

Langage PHP

  1. #1
    Membre averti Avatar de renaud26
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    1 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 365
    Points : 436
    Points
    436
    Par défaut [Dates] Incrémenter une date jour par jour dans une boucle
    Bonjour à tous,

    Pour des tests, je souhaiterais écrire 2 ou 3 ans de dates dans un fichier texte. Or je ne parviens pas à créer la boucle qui écrirait ça.

    Par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    $date_debut = "2006-01-01";
    $date_fin = date("Y-m-d");
     
    for($i=$date_debut;$i<$date_fin;$i++){
    fwrite($fic, $i.'\n');
    pour écrire :
    2006-01-01
    2006-01-02
    2006-01-03
    etc...jusqu'à aujourd'hui.

    Evidemment, cette boucle est naze ! Je cherche du côté de mktime(), mais je ne suis pas sûr d'arriver à quelque chose avec ça...

  2. #2
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Citation Envoyé par renaud26 Voir le message
    Evidemment, cette boucle est naze ! Je cherche du côté de mktime(), mais je ne suis pas sûr d'arriver à quelque chose avec ça...
    Et pourtant c'est bien de ce côté que tu dois te tourner.
    Les manipulations de date doivent se faire par les timestamp.

  3. #3
    Membre expert
    Avatar de ThomasR
    Homme Profil pro
    Directeur technique
    Inscrit en
    Décembre 2007
    Messages
    2 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 2 230
    Points : 3 972
    Points
    3 972
    Par défaut
    Bonjour,

    as-tu essayé de cette manière ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $today = time();
    $time = $today;
    // On va passer en revue 730 jours / env 2 ans
    for($i = 1; $i <= 730; $i++){
        $time += 86400; // On incrémente au timestamp 86400 s par jour
        echo date('y-m-d',$time);
    }

  4. #4
    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
    Salut Renaud,

    Les objet DateTime, c'est ce qu'il y a de plus rapide.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <?php
      $fichier = 'date.txt';
     
      $dateDeb = new DateTime('2006-01-01');  
      $dateFin = new DateTime();
     
      $date = '';  
      while ($dateDeb -> format('Y-m-d') <= $dateFin -> format('Y-m-d'))
      {
        $date .= $dateDeb -> format('Y-m-d') . "\n";
        $dateDeb -> modify('+1 day');
      }
      file_put_contents($fichier, $date)
    ?>

  5. #5
    Membre expert
    Avatar de ThomasR
    Homme Profil pro
    Directeur technique
    Inscrit en
    Décembre 2007
    Messages
    2 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 2 230
    Points : 3 972
    Points
    3 972
    Par défaut
    Cest clair que c'est beaucoup plus limpide avec l'objet DateTime

  6. #6
    Membre averti Avatar de renaud26
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    1 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 365
    Points : 436
    Points
    436
    Par défaut
    Merci beaucoup de vos réponses, je n'ai pas reçu le mail d'alerte.

    @Jérôme : salut ! et merci de ton coup de main...mais j'ai bien l'impression que mon serveur a une version PHP insuffisante pour les objets DateTime...

    @thomasR : merci à toi aussi, je vais tester ta methode.

    Puis je vous dis ce qu'il en est.

  7. #7
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Une autre version avec mktime
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $date_debut = '2006-01-01'; //date du début
    $nb_jours = 730; //nombre de jours à passer en revue
    for ($i = 0; $i<$nb_jours; $i++)
    {
      list ($year, $month, $day)= explode("-", $date_debut);
      $time = mktime ('0', '0', '0', $month,  $day+$i, $year );
      echo date('Y-m-d',$time);
    }

  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
    Objet DateTime à partir de php 5.1

    Autre solution :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
      $fichier = 'date.txt';
     
      $dateDeb = strtotime('2006-01-01');  
      $dateFin = strtotime('now');
     
      $date = '';  
      while ($dateDeb <= $dateFin)
      {
        $date .= date('Y-m-d', $dateDeb) . "\n";
        $dateDeb = strtotime('+1 day', $dateDeb);
      }
     
      file_put_contents($fichier, $date);
    Pour information, la différence de temps d'éxécution (hors écriture dans le fichier) est éloquente :
    objet DateTime : 0.093948125839233
    le code ci-dessus : 1.0996310710907

  9. #9
    Membre averti Avatar de renaud26
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    1 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 365
    Points : 436
    Points
    436
    Par défaut
    Merci Celira, merci Jérôme...et aux autres : c'est impec !
    Je vais enfin me décider à installer php >5 !

    Bonne journée à tous.

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

Discussions similaires

  1. Réponses: 11
    Dernier message: 08/10/2010, 11h00
  2. Affichage de jour par mois dans une grille ( planning)
    Par thierry007 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 04/09/2009, 13h18
  3. Récupérer le jour, le mois dans une date mysql
    Par sandddy dans le forum Requêtes
    Réponses: 2
    Dernier message: 18/03/2008, 11h54
  4. Réponses: 7
    Dernier message: 22/11/2006, 09h14
  5. Réponses: 2
    Dernier message: 30/08/2006, 22h51

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