PHP BUG! probleme avec mktime()

Petit nouveau ! | 2 Messages

31 août 2010, 16:06

bonjour les amis!
j'ai un probleme avec mktime() voici mon code simplifié:

Code : Tout sélectionner

<?php $themonth=8; $prevM = date("M", mktime(0, 0, 0, ($themonth - 1) )); $nextM = date("M", mktime(0, 0, 0, ($themonth + 1) )); echo '$prevM='.$prevM.'<br />$nextM='.$nextM; ?>
//il echo :
// $prevM=Jul // ok
//$nextM=Oct // pas ok!


Jai essayé avec un autre mois:

Code : Tout sélectionner

themonth=9; $prevM = date("M", mktime(0, 0, 0, ($themonth - 1) )); $nextM = date("M", mktime(0, 0, 0, ($themonth + 1) )); echo '$prevM='.$prevM.'<br />$nextM='.$nextM;
//il echo :
$prevM=Aug // ok
$nextM=Oct // ok!


Et aussi :

Code : Tout sélectionner

themonth=10; $prevM = date("M", mktime(0, 0, 0, ($themonth - 1) )); $nextM = date("M", mktime(0, 0, 0, ($themonth + 1) )); echo '$prevM='.$prevM.'<br />$nextM='.$nextM;
il echo:
$prevM=Oct //pas ok
$nextM=Dec // ok!


Donc je ne comprenez pas et j'ai aussi essayer avec les chiffre du mois directement dans la function mktime :

Code : Tout sélectionner

prevM = date("M", mktime(0, 0, 0, 9 )); $nextM = date("M", mktime(0, 0, 0, 11)); echo '$prevM='.$prevM.'<br />$nextM='.$nextM;
il echo:
$prevM=Oct
$nextM=Dec


Je ne comprend pas du tout! est un probleme du server ? ou un bug de PHP ??

ViPHP
ViPHP | 4039 Messages

31 août 2010, 16:27

Bon, il ne faut pas crier trop vite au bug (et c'en est pas un, pour le coup).

Ajoute le paramètre du jour, et le tout rentre dans l'ordre.
$themonth=8;
$prevM = date("M", mktime(0, 0, 0, ($themonth - 1),1 ));
$nextM = date("M", mktime(0, 0, 0, ($themonth + 1),1 ));
echo '$prevM='.$prevM.'
$nextM='.$nextM;
Pour ce qui est du comportement, c'est normal. Quand on ne spécifie pas de jour dans mktime(), il suppose le 31. Or, je te laisse imaginer quelle date donne un timestamp du 31 février..
echo date('c',mktime(0,0,0,2))."\n";
Il fallait juste un peu étudier le comportement de mktime().
Mais qu'importe. (je suis ici - dernier petit projet)
Berze going social.

Petit nouveau ! | 2 Messages

31 août 2010, 16:38

MERCI pour la reponse tout est rentré dans l'ordre ... #-o =D> :D J'aurais pu y rester toute la journée merci encore et bonjour de la norvège 8-)

ViPHP
ViPHP | 5462 Messages

31 août 2010, 19:23

MERCI pour la reponse tout est rentré dans l'ordre ... #-o =D> :D J'aurais pu y rester toute la journée merci encore et bonjour de la norvège 8-)
sinon pour faire ce genre de chose c'est avec strtotime :wink:

ViPHP
ViPHP | 4039 Messages

01 sept. 2010, 09:02

Quand on ne spécifie pas de jour dans mktime(), il suppose le 31.
C'est pas tout à fait juste en fait, c'est juste qu'hier on était le 31, et que donc mktime() prenait comme valeur par défaut le jour courant, c'est tout à fait logique.

De plus, ce sujet n'a pas sa place dans php avancé.

Voilà, je ne pouvais en dormir la nuit, c'est réparé maintenant.
Mais qu'importe. (je suis ici - dernier petit projet)
Berze going social.