Intereting Posts
Как изменить HTTP-ответ и показать сообщение об ошибке, когда исключение происходит в деструкторе? php imagepng () генерирует черное изображение только на сервере Как бы остановить этот цикл foreach после 3 итераций? Два амперсанда между функциональными вызовами Получить имя и описание продукта в шаблонах электронной почты WooCommerce Каковы преимущества программирования OO? Помогло бы мне написать лучший код? Как ограничить просмотр файлов в каталоге Удаление ссылки на индекс массива при использовании json_encode в php Как создать подкатегории подкатегорий PHP Regex для нескольких символов Unicode Можно ли безопасно использовать str_replace в кодированной кодировке UTF-8, если в качестве аргументов заданы только строки с кодировкой UTF-8? Две переменные, если пусто другое другое Как загрузить возвращаемый массив из файла PHP? Соединение PDO работает из командной строки, но не через Apache? Как сбросить CURLOPT_CUSTOMREQUEST

Неверное преобразование PHP strtotime

Я смотрел в руководствах, это, вероятно, странность преобразования, но я не могу понять это. Я получаю дату от пользователя и пытаюсь проверить его на 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

Related of "Неверное преобразование PHP strtotime"

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 . Это должно исправить европейскую ошибку формата даты, но имейте в виду, что обратное будет теперь проблемой.