2015-04-01 2 views
0

Выполняя преобразование даты, используя 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 

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

ответ

1

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

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

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

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

+0

В этой ссылке в нем перечислены «День, месяц и год двух цифр с точками или вкладками» с примером «30.6.08» как совместимый, поэтому не следует ли анализировать дату в этом формате? – Shuma

+0

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

+0

А теперь я вижу, что это имеет больше смысла, спасибо за информацию – Shuma

0

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

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

читает дату как DD.MM.YY

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

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

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

Array ([0] => 15-01-30) 
Смежные вопросы