PHP strtotime неправильное преобразование - PullRequest
2 голосов
/ 03 мая 2011

Я посмотрел в руководствах, это, вероятно, странность преобразования, но я не могу понять это.Я получаю дату от пользователя и пытаюсь проверить ее в PHP (версия 4.1) (используя strtotime и проверяя возвращаемое значение).Пользователи будут вводить дату в европейском формате (dmy), но когда я передаю дату этого формата в strtotime, она не соответствует, например:

03-01-2011 преобразуется в 3 июля 2008 года

Я знаю, что в руководстве говорится, что дата, разделенная дефисом или точкой, интерпретируется как европейская, но здесь она не работает.

$startDate=$_GET['start'];
echo $startDate;
$timestamp=strtotime($startDate);
echo $timestamp;
echo date("d-M-Y",$timestamp);

вывод из первого эха - 03-01-2011 (это правильно- введенное пользователем значение), второй эхо-сигнал показывает временную метку как 1215039600, а эхо-дата показывает 03-Jul-2008

Ответы [ 2 ]

3 голосов
/ 03 мая 2011

strtotime волшебно, но не безошибочно.Если вы хотите гарантировать правильное преобразование, вы должны использовать

$dt = DateTime::CreateFromFormat('d-m-Y', $startDate);

, который позволяет указывать форматы расширения для ввода, поэтому нет никакой двусмысленности.

К сожалению, это только PHP 5.3+,и вы застряли на 4.1.Даже strfptime(), который работает аналогично, пришел только в 5.1

Я настоятельно рекомендую обновить вашу версию PHP, поскольку 4.x устарела и не поддерживается.

При этом я могу 'Понятно, как любая неопределенность конверсии конвертирует 2011 год в 2008 год. Различия в часовых поясах и странность дня / месяца отбросят часы и месяцы, но не изменят ситуацию на 3 года.

1 голос
/ 03 мая 2011

По умолчанию PHP ожидает, что число-число-число равно Y-m-d, и работает в обратном направлении до тех пор, пока не станет понятной дата. Возможно, вам придется изменить настройку локали: http://ca.php.net/manual/en/class.locale.php. Это должно исправить ошибку европейского формата даты, но имейте в виду, что обратное теперь будет проблемой.

...