Добавление дней к дате, вывод неверных дат? [Дубликат]

Одна полезная строка кода для вас была бы

$sql = "Your SQL statement here";
$result = mysqli_query($sql) or trigger_error("Query Failed! SQL: $sql - Error: ".mysqli_error(), E_USER_ERROR);

Этот метод лучше, чем умереть, потому что вы можете использовать его для разработки AND production, это постоянное решение.

0
задан Melisa Mosa 2 May 2017 в 19:46
поделиться

1 ответ

При использовании 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('d-m-Y', ''18-04-2017);

// Get MySQL format (ISO-8601) of 2017-04-18
$mysqlDate = $date2->format('Y-m-d');

См. также:


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

$date = $date1 = DateTime::createFromFormat('m/d/Y', '20/02/2000');
$D->query = $date->format('Y-m-d'); // 2000-02-20
3
ответ дан John Conde 16 August 2018 в 14:15
поделиться
  • 1
    И здесь я собирался опубликовать двухстрочный ответ, хе-хе. +1! – ceejayoz 2 May 2017 в 19:48