Я смотрел в руководствах, это, вероятно, странность преобразования, но я не могу понять это. Я получаю дату от пользователя и пытаюсь проверить его на PHP (версия 4.1) (используя strtotime и проверяя возвращаемое значение). Пользователи будут вводить дату в европейском формате (dmy), но когда я поставлю эту дату формата в strtotime, она будет непоследовательной, например:
03-01-2011 конвертируется к 3 июля 2008 года
Я знаю, что в руководстве говорится, что дата с дефисом или точкой, обозначенная как точка, интерпретируется как европейская, но здесь она не работает.
$startDate=$_GET['start']; echo $startDate; $timestamp=strtotime($startDate); echo $timestamp; echo date("dMY",$timestamp);
выход из первого эха – 03-01-2011 (это правильно – введенное пользователем значение), второе эхо показывает отметку времени как 1215039600, а время эха – 03-июл-2008
strtotime
является волшебным, но он не является непогрешимым. Если вы хотите гарантировать правильное преобразование, вы должны использовать
$dt = DateTime::CreateFromFormat('dm-Y', $startDate);
который позволяет вам указывать форматы объяснения для ввода, поэтому нет никакой двусмысленности.
К сожалению, это только PHP 5.3+, и вы застряли на 4.1. Даже strfptime()
который работает аналогично, пришел только в 5.1
Я настоятельно рекомендую обновить вашу версию PHP, так как 4.x устарел и не поддерживается.
Это говорит о том, что я не вижу, как любая конверсия неоднозначности будет конвертировать 2011 в 2008 году. Разница в часовых поясах и нечетность дня / месяца отбрасывают часы и месяцы, но не изменят ситуацию на 3 года.
По умолчанию PHP ожидает, что номер номера-номера Ymd и работает оттуда оттуда до даты имеет смысл. Возможно, вам придется изменить свой язык: http://ca.php.net/manual/en/class.locale.php . Это должно исправить европейскую ошибку формата даты, но имейте в виду, что обратное будет теперь проблемой.