2010-08-31 5 views
4

Voici ce que j'ai:problème avec la date() et strtotime

$str = '12-25-2009'; 
echo date('Y-m-d', strtotime($str)); 

Ce produit 1969-12-31 au lieu de 2009-12-25. Si je mets le $ str var au 01-01-2009, j'obtiendrai le 2009-01-01 qui est correct. Pourquoi cela arrive-t-il?

+0

Intéressant. Pourquoi produit-il 1969-12-31 comme production alors qu'avec une telle erreur je m'attendrais à ce qu'il revienne 1970-01-01. D'après la documentation, il devrait retourner FALSE si quelque chose ne va pas et si FALSE n'est pas égal à -1. J'ai peut-être tort. Et personne ne s'en soucie de toute façon :) – schuilr

Répondre

2

Essayez $str = '25-12-2009'; ou $str = '12/25/2009';

si le format de la date est le jour tableau de bord de l'utilisation des mois de l'année (-) d'autre si le format a été slash mois année jour d'utilisation (/)

+0

Hey Luke, en utilisant les barres obliques fixes. Merci. – John

2

strtotime('12-25-2009') renvoie false, qui est ensuite converti en nombre entier par date.

Il semble que l'utilisation de tirets perturbe strtotime. La même date, avec des barres obliques au lieu, fonctionne comme un charme:

echo strtotime('12/25/2009'); // yields 1261717200 
+0

Merci. Puis-je le lancer comme une ficelle ou y a-t-il une autre façon de le faire? – John

+2

@John Casting un booléen à une chaîne ne va pas aider. 'strtotime' ne parvient pas à analyser les dates avec des tirets, donc vous devez utiliser un autre format. Peut-être que pour les dates simples 'str_replace ('-', '/', $ str)' fera l'affaire. – zneak

+0

Oh, vous avez raison, tant pis. Tant que j'utilise des barres obliques dans la boîte de saisie, je vais bien. Ce sont les tirets qui me causaient du chagrin. – John

2

En utilisant des tirets comme séparateur, il est une date comme l'analyse syntaxique européenne, alias JJ-MM-AAAA. 01-01-2009 est une date valide soit MM/JJ/AAAA ou JJ-MM-AAAA, mais le 12-25-2009 n'est valable que MM-JJ-AAAA ce qui n'est pas vraiment correct. La représentation correcte pour MM/JJ/AAAA est avec des barres obliques, ce qu'une autre affiche a déjà indiqué en effet correctement analysé.

Si vous utilisez YYYY-MM-DD (format de date ISO) pour tout, vous serez en mesure d'éviter au moins certaines de ces frustrations.