Probleme avec mktime()

Le
Gerard Breiner
Bonjour,

Je teste que le timestamp unix généré par la fonction mktime correspond
bien aux dates et heures que j'ai passé en paramètres.
Tout concorde sauf pour le paramètre "hour" avec comme valeur 08 et 09 mais
si je mets les paramètres de mktime() avec des quotes tout marche bien.
Cependant, je ne comprends pas, car la description de mktime () spécifie que
les paramètres sont des entiers, donc, normalement, je ne devrai pas mettre
de quotes.

Voici mon programme de test de la fonction mktime():

<?php
// test avec quotes
$utmst1 = mktime('09','58','43','04','20','2004'); //fonctionne
$ndate1 = date('H:i:s d-m-Y',$utmst1); print $ndate1;
//-
//test sans quotes
$utmst2 = mktime(09,58,43,04,20,2004); // fonctionne pour toutes les heures
sauf 08 et 09
$ndate2 = date('H:i:s d-m-Y',$utmst2); print $ndate2; //j'obtiens 00:58:43
20-04-2004 au lieu de 09:58:43 20-04-2004
print "timestamp : $utmst2";
?>

Bien cordialement


Gerard Breiner
Institut D'Astrophysique Spatiale
Orsay
France
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Olivier Miakinen
Le #581513
//-------------------------------------------------------------
//test sans quotes
$utmst2 = mktime(09,58,43,04,20,2004); // fonctionne pour toutes les heures
sauf 08 et 09


Je parierais bien que PHP interprète les nombres comme de l'octal s'ils
sont précédés de 0 (convention du langage C).

Essaye ceci :
$utmst2 = mktime(9,58,43,4,20,2004);

Guillaume Brocker
Le #581515
Gerard Breiner wrote:
Bonjour,

Je teste que le timestamp unix généré par la fonction mktime correspond
bien aux dates et heures que j'ai passé en paramètres.
Tout concorde sauf pour le paramètre "hour" avec comme valeur 08 et 09 mais
si je mets les paramètres de mktime() avec des quotes tout marche bien.
Cependant, je ne comprends pas, car la description de mktime () spécifie que
les paramètres sont des entiers, donc, normalement, je ne devrai pas mettre
de quotes.


Et bien, en PHP, comme dans certains autres langages de programmations,
09 n'est pas équivament à 9. Tout entier littéral commençant par 0 est
considéré comme un nombre en base 8. Voilà pourquoi 08 et 09 ne
fonctionnent pas comme espéré.

En mettant les nombres dans des chaînes de caractères, PHP convertit à
la volée ces chaînes en nombres et dans ce cas 08 et 09 ne sont pas
considérés comme des nombres en base 8. Voilà pourquoi ça fonctionne
comme espéré. :)

Pour plus d'informations, voir le chapitre suivant du manuel:

--
Guillaume Brocker

Gerard Breiner
Le #581026
Bonjour,

Ces réponses confortent ce dont je me doutais un peu. Cependant, le 9 au
lieu de 09, j'avais déjà essayé avant de poster mais moi j'ai besoin de 09
voilà pourquoi j'adopte le système des quotes qui apparemment résoud mon
problème.

Cordialement

Gerard Breiner

"Olivier Miakinen" news:c68kmt$2b2l$
//-------------------------------------------------------------
//test sans quotes
$utmst2 = mktime(09,58,43,04,20,2004); // fonctionne pour toutes les
heures


sauf 08 et 09


Je parierais bien que PHP interprète les nombres comme de l'octal s'ils
sont précédés de 0 (convention du langage C).

Essaye ceci :
$utmst2 = mktime(9,58,43,4,20,2004);



Publicité
Poster une réponse
Anonyme