Я передаю дату (dd / mm / yyyy) в URL-адресе в следующем формате:
http://www.website.com/_parameter=20/02/2000
Я использую следующий PHP, чтобы преобразовать его в формат YYYY-MM-DD.
<?php $D->query = ''; if ($this->param('_parameter')) $D->query = date('Ym-d', strtotime($this->param('_parameter'))); ?>
И моя база данных следующая:
SELECT idtask FROM task WHERE unfinish=1 AND date LIKE '%".$D->query."%' "
Приведенные выше возвращают следующее:
1970-01-01
При использовании strotime()
вы должны убедиться, что используете действующий формат даты и времени . В противном случае strtotime()
вернет false
или даст вам неожиданное значение.
Даты, которые используют формат XX / XX / XXXX, считаются в формате США, что означает, что первые две цифры представляют месяц, следующие две цифры представляют день месяца, а последние четыре цифры представляют год. Когда используются тире, даты предполагаются в европейском формате. Например:
04/18/2017 = April 18, 2017 12/18/2017 = December 18, 2017 18-04-2017 = April 18, 2017 18-12-2017 = December 18, 2017
Если вы случайно переключите день и месяц, strtotime()
вернет false, поскольку дата недействительна.
18/04/2017 // error 18/12/2017 // error 04-18-2018 // error 12-18-2017 // error
Вышеприведенные примеры являются простыми. Но вы можете столкнуться с проблемами, когда даты могут быть неоднозначными. Например:
04/12/2017 = April 12, 2017 12/04/2017 = December 4, 2017 04-12-2017 = December 4, 2017 12-04-2017 = April 12, 2017
В приведенных выше примерах, переключая день и месяц, мы по-прежнему получаем действительные даты, которые могут привести к неожиданным результатам в вашем приложении. Чтобы решить эти потенциальные проблемы, рекомендуется использовать DateTime::createFromFormat()
для анализа объявления даты, возвращающего объект DateTime()
из которого вы можете получить отметку времени Unix , преобразовать дату в другой формат или использовать ее для сравнения с другими Объекты DateTime
.
// Parse US date format $date1 = DateTime::createFromFormat('m/d/Y', '04/18/2017'); // Get Unix timestamp of 1493581268 $timestamp = $date1->getTimestamp(); // Parse European date format $date2 = DateTime::createFromFormat('dm-Y', ''18-04-2017); // Get MySQL format (ISO-8601) of 2017-04-18 $mysqlDate = $date2->format('Ym-d');
Смотрите также:
Для вашего конкретного случая следующий код будет работать:
$date = $date1 = DateTime::createFromFormat('m/d/Y', '20/02/2000'); $D->query = $date->format('Ym-d'); // 2000-02-20