Problème avec date() de PHP

Résolu
adaro2000 Messages postés 46 Statut Membre -  
adaro2000 Messages postés 46 Statut Membre -
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. briiiiix Messages postés 624 Statut Membre 18
     
    essaies de changer le format ("d-m-Y")
    0
  2. macgawel Messages postés 676 Statut Membre 89
     
    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
  3. adaro2000 Messages postés 46 Statut Membre 2
     
    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. macgawel Messages postés 676 Statut Membre 89
       
      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
      1. adaro2000 Messages postés 46 Statut Membre 2 > macgawel Messages postés 676 Statut Membre
         
        Merci beaucoup pour ton code. C'est plus pratique.
        Encore une fois merci.
        Sincèrement.
        0
  4. briiiiix Messages postés 624 Statut Membre 18
     
    C'est du a l'heure d'été, rappel toi, on a changé l'heure le weekend dernier !!!
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. adaro2000 Messages postés 46 Statut Membre 2
     
    J'ai trouvé.
    Il me fallait utilisé la fonction date_default_timezone_set() pour tout gérer automatiquement.
    Merci pour vos contributions.
    0