Probleme avec getdate() et le mois d'octobre ! [PHP][Résolu] - PHP - Programmation
Marsh Posté le 08-07-2004 à 15:30:44
sans ton code, les studios ne peuvent rien
Marsh Posté le 08-07-2004 à 15:37:03
Code :
|
Edit : Ne pas faire gaffe aux parenthèses manquantes pour les if, c'est l'affichage qui bug.
Marsh Posté le 08-07-2004 à 15:59:33
if $curday>0 && $curday<10) => il manque une ( dans tes 2 premiers if
date("d-m-Y", mktime(...)) est équivalent à
$dateLundiSuiv = getdate(mktime(...);
$dateLundiSuiv = $dateLundiSuiv['mday']."-".$dateLundiSuiv['mon']."-".$dateLundiSuiv['year'];
Ton erreur, je ne l'ai pas localisée pour le moment.
Juste une chose, pour simplifier ton script. Pourquoi passes tu en paramètre d'url des dates plutôt que des timestamps ?
Cela t'éviterait les conversions systématiques.
Marsh Posté le 08-07-2004 à 16:13:47
T509 a écrit : if $curday>0 && $curday<10) => il manque une ( dans tes 2 premiers if |
C'est l'affichage qui bug, mais ils y sont
T509 a écrit : date("d-m-Y", mktime(...)) est équivalent à |
Merci pour l'astuce.
T509 a écrit : Juste une chose, pour simplifier ton script. Pourquoi passes tu en paramètre d'url des dates plutôt que des timestamps ? |
En effet je vais faire comme ça.
Marsh Posté le 08-07-2004 à 16:31:44
C'est bluffant, t'embete pas avec mes sources elles sont correctes, regarde plutôt ça :
Code :
|
Resultat :
Code :
|
En effêt le lundi d'après le lundi 26 janvier 2004 est bien le 2 février, mais le lundi d'après le 25 octobre n'est pas le 31 octobre ! (c'est un dimanche le 31).
La fonction getdate() marche parfaitement pour chaque passage de mois sauf de octobre vers novembre.
...
Marsh Posté le 08-07-2004 à 16:56:51
Mais il fait vraiment un blocage sur cette fin de mois :
Code :
|
Donc j'ajoute un jour au 31 octobre 2004 et comme par magie je me retrouve au 31 octobre 2004 !
Vous allez me demander pourquoi je repete 2004 à chaque fois , tout simplement parce qu'en 2003 ou 2005 il passe bien au jour d'après et ne reste pas coincé
(et ce n'est pas une question d'année bisextile car 2000 et 2008 marchent aussi !)
Marsh Posté le 08-07-2004 à 16:58:28
Je ne comprends pas ton souci, il doit y avoir autre chose.
Je viens d'essayer avec un script à moi et cela fonctionne bien.
Code :
|
Marsh Posté le 08-07-2004 à 17:04:22
Code :
|
Essaye ça !
Marsh Posté le 08-07-2004 à 17:09:03
Bizarre, je ne comprends pas
Marsh Posté le 08-07-2004 à 17:09:20
Code :
|
Résultat :
Code :
|
Plantage régulier tous les 6 ans ou presque ...
Marsh Posté le 08-07-2004 à 17:13:57
lol ok ça bug des que le dernier jour d'octobre est un dimanche...
Marsh Posté le 08-07-2004 à 17:15:13
eh bien tu viens de trouver un bug de mktime()
tu peux le signaler à la en postant dans les commentaires de la doc officielle. Bizarre
Ma solution ne souffre pas de ce bug
Marsh Posté le 08-07-2004 à 17:21:35
Merci en tout cas d'avoir lutté avec moi, je vais étudier ta solution.
Quand l'erreur vient de la clé a molette et non du plombier c'est pas le top =)
Marsh Posté le 08-07-2004 à 18:14:39
C'est bizarre, en remplaçant getdate() par date() dans ta boucle buggée, le 01/11/1993 passe bien.
Marsh Posté le 08-07-2004 à 21:55:55
WarDrone a écrit :
|
L'erreur est due (en théorie) aux passages heure d'été/hivers. Il y aurait quand même un bug.
Pour ne pas y être sensible, il faut utiliser gmmktime() et gmdate()
C'est toujours bon à savoir.
Marsh Posté le 08-07-2004 à 21:58:46
En effet ! Probleme résolu,
Merci à tous ! Enfin merci à toi et moi =)
Marsh Posté le 09-07-2004 à 10:27:41
Après discussion avec un gars de PHP.net, il y aurait vraiment un bug. A suivre ...
Marsh Posté le 27-01-2005 à 13:36:21
Une solution apportée par un collègue :
Son commentaire :
Citation : |
Code :
|
Le résultat
Citation : |
--Edit : ajout du commentaire
Marsh Posté le 27-01-2005 à 14:17:08
C'est cool d'avoir trouvé ce bug/fonctionnalité mais pourquoi ne pas avoir fait dès le début
Code :
|
Il prend le jour en cours, rajoute 7 jours, change de mois/année tout seul si nécessaire et pouf, c'est tout ...
Et en plus, c'est vachement plus lisible je trouve
Marsh Posté le 08-07-2004 à 15:23:46
Mise a jour :
Et voila les bugs évoqués plus bas ne sont pas des bugs, il faut savoir que getdate prend en compte le changement d'heure (été-hivers) donc il y a un jour dans l'année ou il faut ajouter plus que 24h pour passer au jour d'après (le dernier dimanche d'octobre dure 25h).
Fonctionnalité interessante, mais qui a été difficile à isoler :]
---------------- Message intermédiaire -----------------
Le bug est simple, prenez n'importe quel 31 octobre, calculez la date du lendemain : getdate(mktime(0,0,0,10,31,ANNEE)+1*24*3600);
En résumé : getdate(mktime(0,0,0,10,31,2003)+1*24*3600) donne le 1/11/2003 comme vous vous en doutiez, mais étrangement pour l'année 2004 le jour d'après est encore le 31/10/2004 !
Pourquoi ?
--------------- Message original -----------------------
Je gere un affichage de planning hebdomadaire et pour naviguer entre les semaines, je propose un menu de ce type :
<- Semaine du 25-10-2004 au 31-10-2004 ->
<- étant un lien transportant dans l'url la variable du lundi précédent
-> celui transportant le lundi suivant
Tout ceci est calculé avec la fonction getdate :
Ce code marche trés bien, il me donne à chaque fois une date valide pour le lundi précédent ou suivant. Seul soucis, le mois d'octobre 2004 est rebel, en effet pour la dernière semaine, celle affichée en exemple, il me calcule un lundi suivant égal au dimanche (donc le 31)
En résumé tout marche sauf pour le mois d'octobre.
Je ne comprends vraiment pas.
A vous les studios et merci par avance.
Message édité par WarDrone le 08-07-2004 à 22:03:05