Несовместимые преобразования strtotime

При преобразовании даты с использованием strtotime я получаю противоречивые результаты.

массив [0] содержит дату для преобразования:

Original -> converted -> converted back

Array ([0] => 30.01.15) -> 1422576000 -> GMT: Fri, 30 Jan 2015 00:00:00 GMT
Array ([0] => 23.01.15) -> 1427925675 -> GMT: Wed, 01 Apr 2015 22:01:15 GMT

При использовании тире вместо точек я получаю:

Array ([0] => 30-01-15) -> 1894665600 -> GMT: Tue, 15 Jan 2030 00:00:00 GMT
Array ([0] => 23-01-15) -> 1673740800 -> GMT: Sun, 15 Jan 2023 00:00:00 GMT

Это работает в первом случае, используя точки, но во втором, используя точки, я получаю сегодняшнюю дату? Любые идеи, что может быть причиной этого несоответствия?

0

Решение

Согласно руководству по PHP, дата и время должны быть указаны в поддерживаемом формате даты / времени: http://php.net/manual/en/datetime.formats.date.php

«Точечная» запись, кажется, не поддерживается для значений даты, поэтому PHP пытается проанализировать ее как время, вот почему вы получили это «странное» поведение.

Чтобы лучше объяснить другое поведение:
в первом прогоне 30 нельзя интерпретировать как значение часа, поэтому PHP пытается с разбором даты, во втором прогоне 23 это разумное значение часа, поэтому оно идет на время.

Формат «День, месяц и год с двумя цифрами, с точками или табуляциями» (дд [. \ T] мм ».« Гг) работает только для значений года от 61 (включительно) до 99 (включительно) — вне этих лет время формат «HH [.:] MM [.] SS» имеет приоритет

1

Другие решения

Похоже, что PHP интерпретирует даты в разных форматах.

Array ([0] => 30.01.15) -> 1422576000 -> GMT: Fri, 30 Jan 2015 00:00:00 GMT

Читает дату как ДД.ММ.ГГ

Array ([0] => 30-01-15) -> 1894665600 -> GMT: Tue, 15 Jan 2030 00:00:00 GMT

Читает дату как YY-MM-DD

Попробуйте изменить это на:

Array ([0] => 15-01-30)
0

По вопросам рекламы [email protected]