Salut, j'ai donc un soucis avec la fonction strtotime :
- en local (PHP 4.4.1 livré avec OSX), je lui passe des chaînes du type
'20061011000000' qu'elle accepte sans broncher.
- en ligne (PHP 4.4.4 chez OVH), elle ne veut rien savoir et me renvoie
une erreur (-1).
Le seule solution que j'ai trouvée pour le moment est de séparer
clairement la date et l'heure : '20061011 000000'. Mais je serais quand
même curieux de connaître le pourquoi du comment de cette différence de
traitement.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Olivier Miakinen
Salut, j'ai donc un soucis avec la fonction strtotime : - en local (PHP 4.4.1 livré avec OSX), je lui passe des chaînes du type '20061011000000' qu'elle accepte sans broncher. - en ligne (PHP 4.4.4 chez OVH), elle ne veut rien savoir et me renvoie une erreur (-1).
Voyons la doc de strtotime : <http://fr3.php.net/strtotime>.
<cit.> Liste de paramètres time La chaîne à analyser, en accord avec la _syntaxe des dates_ GNU. </cit.>
La _syntaxe des dates_ est un lien vers la page suivante : <http://www.gnu.org/software/tar/manual/html_node/tar_109.html>, que je cite :
<cit.> 7.1 General date syntax Common rules. 7.2 Calendar date items 19 Dec 1994. 7.3 Time of day items 9:20pm. 7.4 Time zone items EST, PDT, GMT. 7.5 Day of week items Monday and others. 7.6 Relative items in date strings next tuesday, 2 years ago. 7.7 Pure numbers in date strings 19931219, 1440. 7.8 Seconds since the Epoch @1078100502. 7.9 Specifying time zone rules TZ="America/New_York", TZ="UTC0". </cit.>
Le format le plus proche de celui qui t'intéresse est le 7.7.
Le seule solution que j'ai trouvée pour le moment est de séparer clairement la date et l'heure : '20061011 000000'.
Ceci correspond un peu mieux au format 7.7 que celui sans séparation. Il serait intéressant de savoir si, avec une seule espace sans virgule, il prend en compte les heures, minutes et secondes. C'est-à-dire : est-ce que '20061011 233752' donne ou non le même résultat que '20061011 000000' ?
Mais je serais quand même curieux de connaître le pourquoi du comment de cette différence de traitement.
Plutôt que dans la version de PHP, il faudrait peut-être la chercher dans les différences de version de la libc entre ton OSX et le système d'exploitation présent chez OVH.
Salut, j'ai donc un soucis avec la fonction strtotime :
- en local (PHP 4.4.1 livré avec OSX), je lui passe des chaînes du type
'20061011000000' qu'elle accepte sans broncher.
- en ligne (PHP 4.4.4 chez OVH), elle ne veut rien savoir et me renvoie
une erreur (-1).
Voyons la doc de strtotime : <http://fr3.php.net/strtotime>.
<cit.>
Liste de paramètres
time
La chaîne à analyser, en accord avec la _syntaxe des dates_ GNU.
</cit.>
La _syntaxe des dates_ est un lien vers la page suivante :
<http://www.gnu.org/software/tar/manual/html_node/tar_109.html>,
que je cite :
<cit.>
7.1 General date syntax Common rules.
7.2 Calendar date items 19 Dec 1994.
7.3 Time of day items 9:20pm.
7.4 Time zone items EST, PDT, GMT.
7.5 Day of week items Monday and others.
7.6 Relative items in date strings next tuesday, 2 years ago.
7.7 Pure numbers in date strings 19931219, 1440.
7.8 Seconds since the Epoch @1078100502.
7.9 Specifying time zone rules TZ="America/New_York", TZ="UTC0".
</cit.>
Le format le plus proche de celui qui t'intéresse est le 7.7.
Le seule solution que j'ai trouvée pour le moment est de séparer
clairement la date et l'heure : '20061011 000000'.
Ceci correspond un peu mieux au format 7.7 que celui sans séparation.
Il serait intéressant de savoir si, avec une seule espace sans virgule,
il prend en compte les heures, minutes et secondes. C'est-à-dire :
est-ce que '20061011 233752' donne ou non le même résultat que
'20061011 000000' ?
Mais je serais quand même curieux de connaître le pourquoi du comment
de cette différence de traitement.
Plutôt que dans la version de PHP, il faudrait peut-être la chercher
dans les différences de version de la libc entre ton OSX et le système
d'exploitation présent chez OVH.
Salut, j'ai donc un soucis avec la fonction strtotime : - en local (PHP 4.4.1 livré avec OSX), je lui passe des chaînes du type '20061011000000' qu'elle accepte sans broncher. - en ligne (PHP 4.4.4 chez OVH), elle ne veut rien savoir et me renvoie une erreur (-1).
Voyons la doc de strtotime : <http://fr3.php.net/strtotime>.
<cit.> Liste de paramètres time La chaîne à analyser, en accord avec la _syntaxe des dates_ GNU. </cit.>
La _syntaxe des dates_ est un lien vers la page suivante : <http://www.gnu.org/software/tar/manual/html_node/tar_109.html>, que je cite :
<cit.> 7.1 General date syntax Common rules. 7.2 Calendar date items 19 Dec 1994. 7.3 Time of day items 9:20pm. 7.4 Time zone items EST, PDT, GMT. 7.5 Day of week items Monday and others. 7.6 Relative items in date strings next tuesday, 2 years ago. 7.7 Pure numbers in date strings 19931219, 1440. 7.8 Seconds since the Epoch @1078100502. 7.9 Specifying time zone rules TZ="America/New_York", TZ="UTC0". </cit.>
Le format le plus proche de celui qui t'intéresse est le 7.7.
Le seule solution que j'ai trouvée pour le moment est de séparer clairement la date et l'heure : '20061011 000000'.
Ceci correspond un peu mieux au format 7.7 que celui sans séparation. Il serait intéressant de savoir si, avec une seule espace sans virgule, il prend en compte les heures, minutes et secondes. C'est-à-dire : est-ce que '20061011 233752' donne ou non le même résultat que '20061011 000000' ?
Mais je serais quand même curieux de connaître le pourquoi du comment de cette différence de traitement.
Plutôt que dans la version de PHP, il faudrait peut-être la chercher dans les différences de version de la libc entre ton OSX et le système d'exploitation présent chez OVH.
CrazyCat
Salut, j'ai donc un soucis avec la fonction strtotime : - en local (PHP 4.4.1 livré avec OSX), je lui passe des chaînes du type '20061011000000' qu'elle accepte sans broncher. - en ligne (PHP 4.4.4 chez OVH), elle ne veut rien savoir et me renvoie une erreur (-1).
Extrait du manuel (désolé, en anglais):
7.7 Pure numbers in date strings
The precise interpretation of a pure decimal number depends on the context in the date string.
If the decimal number is of the form yyyymmdd and no other calendar date item (see section 7.2 Calendar date items) appears before it in the date string, then yyyy is read as the year, mm as the month number and dd as the day of the month, for the specified calendar date.
If the decimal number is of the form hhmm and no other time of day item appears before it in the date string, then hh is read as the hour of the day and mm as the minute of the hour, for the specified time of day. mm can also be omitted.
If both a calendar date and a time of day appear to the left of a number in the date string, but no relative item, then the number overrides the year.
-- Astuces pour webmasters: http://www.crazycat.info Tchat francophone: http://www.crazy-irc.net
Salut, j'ai donc un soucis avec la fonction strtotime :
- en local (PHP 4.4.1 livré avec OSX), je lui passe des chaînes du type
'20061011000000' qu'elle accepte sans broncher.
- en ligne (PHP 4.4.4 chez OVH), elle ne veut rien savoir et me renvoie
une erreur (-1).
Extrait du manuel (désolé, en anglais):
7.7 Pure numbers in date strings
The precise interpretation of a pure decimal number depends on the
context in the date string.
If the decimal number is of the form yyyymmdd and no other calendar date
item (see section 7.2 Calendar date items) appears before it in the date
string, then yyyy is read as the year, mm as the month number and dd as
the day of the month, for the specified calendar date.
If the decimal number is of the form hhmm and no other time of day item
appears before it in the date string, then hh is read as the hour of the
day and mm as the minute of the hour, for the specified time of day. mm
can also be omitted.
If both a calendar date and a time of day appear to the left of a number
in the date string, but no relative item, then the number overrides the
year.
--
Astuces pour webmasters: http://www.crazycat.info
Tchat francophone: http://www.crazy-irc.net
Salut, j'ai donc un soucis avec la fonction strtotime : - en local (PHP 4.4.1 livré avec OSX), je lui passe des chaînes du type '20061011000000' qu'elle accepte sans broncher. - en ligne (PHP 4.4.4 chez OVH), elle ne veut rien savoir et me renvoie une erreur (-1).
Extrait du manuel (désolé, en anglais):
7.7 Pure numbers in date strings
The precise interpretation of a pure decimal number depends on the context in the date string.
If the decimal number is of the form yyyymmdd and no other calendar date item (see section 7.2 Calendar date items) appears before it in the date string, then yyyy is read as the year, mm as the month number and dd as the day of the month, for the specified calendar date.
If the decimal number is of the form hhmm and no other time of day item appears before it in the date string, then hh is read as the hour of the day and mm as the minute of the hour, for the specified time of day. mm can also be omitted.
If both a calendar date and a time of day appear to the left of a number in the date string, but no relative item, then the number overrides the year.
-- Astuces pour webmasters: http://www.crazycat.info Tchat francophone: http://www.crazy-irc.net
JPT
Merci à tous les deux pour vos réponses.
J'avais bien lu le manuel, mais totalement zappé le lien vers la syntaxe des dates (ou alors craint de tomber sur une documentation barbare pour l'apprenti que je suis).
Il serait intéressant de savoir si, avec une seule espace sans virgule, il prend en compte les heures, minutes et secondes. C'est-à-dire : est-ce que '20061011 233752' donne ou non le même résultat que '20061011 000000' ?
Comme je m'intéressais surtout à la partie date, je n'avais pas testé avec d'autres valeurs que '000000' pour l'heure, et de fait, dès qu'on met autre chose('20061012 173000' par exemple), la fonction renvoit -1 autant en local que chez OVH. D'après mes quelques tests (et conformément à la doc pas lue !), il faut que ça se présente sous la forme 'HH:MM:SS', d'autres séparateurs provoquent une erreur. Du coup, ça n'a plus beaucoup d'intérêt que '20061011000000' soit accepté tel quel dans certaines configurations, vu qu'apparemment '20061011000001' par exemple provoque une erreur.
Au final, j'utilise donc un 'DATE_FORMAT(laDate ,'%Y-%m-%d %k:%i:%s')' dans ma requête pour que MySQL me renvoie une date bien formatée.
Merci à tous les deux pour vos réponses.
J'avais bien lu le manuel, mais totalement zappé le lien vers la syntaxe
des dates (ou alors craint de tomber sur une documentation barbare pour
l'apprenti que je suis).
Il serait intéressant de savoir si, avec une seule espace sans virgule,
il prend en compte les heures, minutes et secondes. C'est-à-dire :
est-ce que '20061011 233752' donne ou non le même résultat que
'20061011 000000' ?
Comme je m'intéressais surtout à la partie date, je n'avais pas testé
avec d'autres valeurs que '000000' pour l'heure, et de fait, dès qu'on
met autre chose('20061012 173000' par exemple), la fonction renvoit -1
autant en local que chez OVH.
D'après mes quelques tests (et conformément à la doc pas lue !), il faut
que ça se présente sous la forme 'HH:MM:SS', d'autres séparateurs
provoquent une erreur.
Du coup, ça n'a plus beaucoup d'intérêt que '20061011000000' soit
accepté tel quel dans certaines configurations, vu qu'apparemment
'20061011000001' par exemple provoque une erreur.
Au final, j'utilise donc un 'DATE_FORMAT(laDate ,'%Y-%m-%d %k:%i:%s')'
dans ma requête pour que MySQL me renvoie une date bien formatée.
J'avais bien lu le manuel, mais totalement zappé le lien vers la syntaxe des dates (ou alors craint de tomber sur une documentation barbare pour l'apprenti que je suis).
Il serait intéressant de savoir si, avec une seule espace sans virgule, il prend en compte les heures, minutes et secondes. C'est-à-dire : est-ce que '20061011 233752' donne ou non le même résultat que '20061011 000000' ?
Comme je m'intéressais surtout à la partie date, je n'avais pas testé avec d'autres valeurs que '000000' pour l'heure, et de fait, dès qu'on met autre chose('20061012 173000' par exemple), la fonction renvoit -1 autant en local que chez OVH. D'après mes quelques tests (et conformément à la doc pas lue !), il faut que ça se présente sous la forme 'HH:MM:SS', d'autres séparateurs provoquent une erreur. Du coup, ça n'a plus beaucoup d'intérêt que '20061011000000' soit accepté tel quel dans certaines configurations, vu qu'apparemment '20061011000001' par exemple provoque une erreur.
Au final, j'utilise donc un 'DATE_FORMAT(laDate ,'%Y-%m-%d %k:%i:%s')' dans ma requête pour que MySQL me renvoie une date bien formatée.
Olivier Miakinen
Comme je m'intéressais surtout à la partie date, je n'avais pas testé avec d'autres valeurs que '000000' pour l'heure, [...]
C'est parfois un peu risqué d'utiliser des fonctions gérant l'heure quand on veut faire des calculs sur des dates. Par exemple, si tu veux calculer le nombre de jours séparant deux dates dont l'une est à un jour de passage à l'heure d'été ou à l'heure d'hiver, et que justement l'heure correspond à ce passage. C'est vrai que si tu es en France avec une machine correctement configurée, mettre 00:00:00 est sans danger (le passage est entre 2 h et 3 h du matin, ou l'inverse, ce qui correspond à 1 h UTC). Mais dans un pays d'Afrique un peu plus à l'ouest, ou sur une machine mal configurée, tu pourrais tomber sur le cas.
Une autre possibilité consiste à utiliser les fonctions de calendrier : http://www.php.net/calendar
Au final, j'utilise donc un 'DATE_FORMAT(laDate ,'%Y-%m-%d %k:%i:%s')' dans ma requête pour que MySQL me renvoie une date bien formatée.
Ah oui, si tu as MySQL ça me semble encore bien mieux.
Comme je m'intéressais surtout à la partie date, je n'avais pas testé
avec d'autres valeurs que '000000' pour l'heure, [...]
C'est parfois un peu risqué d'utiliser des fonctions gérant l'heure
quand on veut faire des calculs sur des dates. Par exemple, si tu veux
calculer le nombre de jours séparant deux dates dont l'une est à un
jour de passage à l'heure d'été ou à l'heure d'hiver, et que justement
l'heure correspond à ce passage. C'est vrai que si tu es en France avec
une machine correctement configurée, mettre 00:00:00 est sans danger (le
passage est entre 2 h et 3 h du matin, ou l'inverse, ce qui correspond à
1 h UTC). Mais dans un pays d'Afrique un peu plus à l'ouest, ou sur une
machine mal configurée, tu pourrais tomber sur le cas.
Une autre possibilité consiste à utiliser les fonctions de calendrier :
http://www.php.net/calendar
Au final, j'utilise donc un 'DATE_FORMAT(laDate ,'%Y-%m-%d %k:%i:%s')'
dans ma requête pour que MySQL me renvoie une date bien formatée.
Ah oui, si tu as MySQL ça me semble encore bien mieux.
Comme je m'intéressais surtout à la partie date, je n'avais pas testé avec d'autres valeurs que '000000' pour l'heure, [...]
C'est parfois un peu risqué d'utiliser des fonctions gérant l'heure quand on veut faire des calculs sur des dates. Par exemple, si tu veux calculer le nombre de jours séparant deux dates dont l'une est à un jour de passage à l'heure d'été ou à l'heure d'hiver, et que justement l'heure correspond à ce passage. C'est vrai que si tu es en France avec une machine correctement configurée, mettre 00:00:00 est sans danger (le passage est entre 2 h et 3 h du matin, ou l'inverse, ce qui correspond à 1 h UTC). Mais dans un pays d'Afrique un peu plus à l'ouest, ou sur une machine mal configurée, tu pourrais tomber sur le cas.
Une autre possibilité consiste à utiliser les fonctions de calendrier : http://www.php.net/calendar
Au final, j'utilise donc un 'DATE_FORMAT(laDate ,'%Y-%m-%d %k:%i:%s')' dans ma requête pour que MySQL me renvoie une date bien formatée.
Ah oui, si tu as MySQL ça me semble encore bien mieux.