Problème avec date() de PHP
Résolu
adaro2000
Messages postés
46
Date d'inscription
Statut
Membre
Dernière intervention
-
adaro2000 Messages postés 46 Date d'inscription Statut Membre Dernière intervention -
adaro2000 Messages postés 46 Date d'inscription Statut Membre Dernière intervention -
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.
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.
A voir également:
- Problème avec date() de PHP
- Airpods 3 date de sortie - Guide
- Office 2024 date de sortie - Accueil - Bureautique
- Samsung a33 date de sortie - Guide
- Expert php pinterest - Télécharger - Langages
- Cette photo n’a pas été prise cette année. trouvez la date, l'heure et avec quel modèle d'appareil photo elle a été prise. ✓ - Forum Graphisme
5 réponses
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 ?
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 ?
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 ?
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 ?
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...
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question