Problème avec date() de PHP

Résolu
Bonjour,

Je ne comprends pas pourquoi date() de PHP n'arrive pas à travailler avec la date du 26-10-2008.
Voici mon code :

<?php

$fin=time();
$deb=$fin-(25*24*60*60);

$fin=$_GET['fin'];
$deb=$_GET['deb'];

list($y_fin,$m_fin,$d_fin)=explode('-',$fin);
list($y_deb,$m_deb,$d_deb)=explode('-',$deb);

$t_deb=mktime(0,0,0,$m_deb,$d_deb,$y_deb);
$t_fin=mktime(0,0,0,$m_fin,$d_fin,$y_fin);

$r_fin=$t_fin+(60*60*24);

while($r_fin>$t_deb) {
$day=$t_deb+(60*60*24)-1;
echo 'Debut :'.date('Y-m-d H:i:s',$t_deb).'          Fin :'.date('Y-m-d H:i:s',$day);
echo '<br/>Debut :'.$t_deb.'                       Fin :'.$day;

$t_deb=$day+1;
echo "<hr/>";
}

?>

Pouvez-vous m'aider ? Merci d'avance.
Configuration: Windows XP
Firefox 3.0.3

5 réponses

  1. essaies de changer le format ("d-m-Y")
    0
    1. Bonjour.

      Le 26/10/200 correspond (en France, en tout cas) à la date du changement d'heure.
      J'ai testé ton code, avec
      $fin = '2008-10-27';
      $deb = '2008-10-20';

      Le tableau est bon, jusqu'au 26.

      En fait, le 26/10 compte 25 heures ! Comme tu calcules toi-même $day=$t_deb+(60*60*24)-1; le cas particulier du 26/10 te mets dedans...

      Tu veux récupérer le TimeStamp, ou juste afficher les dates ?
      0
      1. Merci pour ta réponse, Macgawel.

        Dans le code, j'incrémente le timestamp par (60*60*24)-1 secondes afin de lancer une requête avec le date('Y-m-d H:i:s') obtenu. Tout marche bien avec les dates antérieures, mais avec le 26-10-2008, le date('Y-m-d H:i:s') renvoyé, au lieu que ce soit 2008-10-26 23:59:59, il me retourne 2008-10-26 22:59:59 ; les résultats ne sont donc plus bons.

        Je ne sais pas si c'est du à un mauvais usage de date ou ...

        As-tu une idée ?
        0
        1. En fait, le 26/10 compte 25 heures !

          Deux solutions :
          1. En restant sur ton principe :
          $fin = '2008-10-27';
          $deb = '2008-10-20';
          list($y_fin,$m_fin,$d_fin)=explode('-',$fin);
          list($y_deb,$m_deb,$d_deb)=explode('-',$deb);
          $jour = mktime(0,0,0,$m_deb,$d_deb,$y_deb);
          $fin = mktime(0,0,-1,$m_fin,$d_fin+1,$y_fin);
          while ($jour < $fin) {
          	echo 'Debut :'.date('Y-m-d H:i:s', $jour);
          	// On va fabriquer l'affichage de la fin de la journée.
          	echo '          Fin :'.date('Y-m-d H:i:s', mktime(0,0,-1,$m_deb,$d_deb + 1,$y_deb)).'<br />';
          	// On passe au jour suivant.
          	// Pas la peine de s'ennuyer à incrémenter le mois, mktime est capable de corriger les "erreurs"
          	// mktime(0, 0, 0, 12, 32, 2007) renvoie le timestamp du 01/01/2008
          	$d_deb +=1;
          	$jour = mktime(0,0,0,$m_deb,$d_deb,$y_deb);
          }

          2. Dans tes requêtes, tu ne prends pas du 2008-10-26 00:00:00 au 2008-10-26 23:59:59, mais tu prends du 2008-10-26 00:00:00 inclus au 2008-10-27 00:00:00 exclus !

          3. Tu modifies ta requête, pour avoir quelque chose du genre :
          SELECT * FROM MATABLE
          WHERE TRUNC(MADATE) = '25/10/2008';

          Et ça te simplifie les choses...
          0
        2. @macgawelMerci beaucoup pour ton code. C'est plus pratique.
          Encore une fois merci.
          Sincèrement.
          0
      2. C'est du a l'heure d'été, rappel toi, on a changé l'heure le weekend dernier !!!
        0
        1. J'ai trouvé.
          Il me fallait utilisé la fonction date_default_timezone_set() pour tout gérer automatiquement.
          Merci pour vos contributions.
          0