Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Probleme avec mktime()

3 réponses
Avatar
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

3 réponses

Avatar
Olivier Miakinen
//-------------------------------------------------------------
//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);

Avatar
Guillaume Brocker
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:
<http://www.php.net/manual/fr/language.types.integer.php>

--
Guillaume Brocker

Avatar
Gerard Breiner
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" <om+ a écrit dans le message de
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);