2010-07-16 4 views
4

strtotime("25/03/1957") renvoie la valeur false. ce qui satisfera tous ces formats de date? Je ne peux pas imaginer combien de temps cela prendrait pour faire le mien, alors j'espère qu'il y en a déjà un que vous connaissez.PHP: l'analyse d'une date de n'importe quel format (notamment: 2008-10-20, 2008/10/20, 2008.10.20, 20 nov. 08)

merci!

+0

Bonne question: 'strtotime' n'est pas génial avec les formats non américains. –

+2

Et littéralement une seconde après avoir posté ceci, je rencontre ceci: http://pics.kuvaton.com/kuvei/month_day_year_america_failure.jpg :) –

Répondre

1

J'ai trouvé que les objets dateTime soutenir une gamme plus large des formats que la fonction strtotime(), et les paramètres de fuseau horaire de votre serveur font également une différence; mais j'ai fini par construire une fonction qui remplacerait '/' par '-' avant d'utiliser la chaîne de caractères. Je teste également pour valide, puis essayez d'échanger les dd et mm apparents (25-03-2001 => 03-25-2001) si invalide avant de tester à nouveau.

2

certaines dates sont Considérant valables mais peuvent indiquer deux différentes dates réelles, aucune fonction ne sera jamais en mesure de « deviner » le format à tout moment ...

Pour aider, avec PHP> = 5.3, une nouvelle fonction a été ajoutée: date_create_from_format - mais il n'existe pas avec PHP 5.3 <, malheureusement ...
(Voir aussi DateTime::createFromFormat)


encore, dans l'exemple que vous avez pris, l'année 1957 est une source possible de problèmes: PHP gen travaille ralement avec UNIX Timestamps, en ce qui concerne les dates ...

Et, au moins sur les systèmes 32 bits, ceux qui ne peuvent représenter les dates entre 1970 et 2038 - comme ils comptent le nombre de secondes écoulées depuis 1970- 01-01.

Pour éviter ce problème, il est souvent une bonne idée d'utiliser la classe DateTime, avec laquelle (quoting):

La date et l'heure est interne stockée sous la forme d'un nombre 64 bits donc toutes les dates imaginables (y compris années négatives) sont pris en charge. La gamme est d'environ 292 milliards d'années dans le passé à la même dans le futur.

(Il ne résoudra pas les problèmes d'analyse syntaxique avec PHP 5.3 <, mais ça va résoudre le problème date ... gamme)