Problème avec date() de PHP

Résolu/Fermé
adaro2000 Messages postés 46 Date d'inscription vendredi 23 mai 2008 Statut Membre Dernière intervention 28 octobre 2008 - 28 oct. 2008 à 14:18
adaro2000 Messages postés 46 Date d'inscription vendredi 23 mai 2008 Statut Membre Dernière intervention 28 octobre 2008 - 28 oct. 2008 à 16:03
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.

5 réponses

briiiiix Messages postés 575 Date d'inscription vendredi 24 octobre 2008 Statut Membre Dernière intervention 1 juin 2010 18
28 oct. 2008 à 14:44
essaies de changer le format ("d-m-Y")
0
macgawel Messages postés 664 Date d'inscription mercredi 7 mai 2008 Statut Membre Dernière intervention 1 novembre 2008 89
28 oct. 2008 à 14:55
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
adaro2000 Messages postés 46 Date d'inscription vendredi 23 mai 2008 Statut Membre Dernière intervention 28 octobre 2008 2
28 oct. 2008 à 15:22
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
macgawel Messages postés 664 Date d'inscription mercredi 7 mai 2008 Statut Membre Dernière intervention 1 novembre 2008 89
28 oct. 2008 à 15:55
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
adaro2000 Messages postés 46 Date d'inscription vendredi 23 mai 2008 Statut Membre Dernière intervention 28 octobre 2008 2 > macgawel Messages postés 664 Date d'inscription mercredi 7 mai 2008 Statut Membre Dernière intervention 1 novembre 2008
28 oct. 2008 à 16:03
Merci beaucoup pour ton code. C'est plus pratique.
Encore une fois merci.
Sincèrement.
0
briiiiix Messages postés 575 Date d'inscription vendredi 24 octobre 2008 Statut Membre Dernière intervention 1 juin 2010 18
28 oct. 2008 à 15:40
C'est du a l'heure d'été, rappel toi, on a changé l'heure le weekend dernier !!!
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
adaro2000 Messages postés 46 Date d'inscription vendredi 23 mai 2008 Statut Membre Dernière intervention 28 octobre 2008 2
28 oct. 2008 à 15:55
J'ai trouvé.
Il me fallait utilisé la fonction date_default_timezone_set() pour tout gérer automatiquement.
Merci pour vos contributions.
0