Дата в URL-адресе dd / mm / yyyy

Я передаю дату (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

Related of "Дата в URL-адресе dd / mm / yyyy"

При использовании 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'); 

Смотрите также:

  • Сравнить объекты DateTime с операторами сравнения в PHP

Для вашего конкретного случая следующий код будет работать:

 $date = $date1 = DateTime::createFromFormat('m/d/Y', '20/02/2000'); $D->query = $date->format('Ym-d'); // 2000-02-20