PHP strtotime возвращает неверные результаты

strtotime ('3 января 2010 года) возвращает 1230993600 в GMT + 5: 30.

Хотя согласно этому , временная отметка unix 1230993600 – 3 января 2009 года . Так что он отключен на один год.

Это происходит на PHP 5.2.6, а также 5.2.11.

Solutions Collecting From Web of "PHP strtotime возвращает неверные результаты"

Проблема заключается в строке даты. Кажется, что он отделяет дату от элементов времени в вашей строке, так как

 echo date('Ymd H:i:s', strtotime('3rd January, 2010')); 

возвращается

 2009-01-03 20:10:00 

в то время как

 echo date('Ymd H:i:s', strtotime('3rd January 2010')); 

( , удалено) возвращает правильную дату:

 2010-01-03 00:00:00 

Когда у вас есть запятая после месяца, она предполагает, что 2010 год – военное время, а не год. Если вы хотите, чтобы он интерпретировал 2010 год как год, пропустите запятую.

strtotime () не является непогрешимым. Это контекстный анализатор, который пытается преобразовать английские описания даты в метку времени. Формат, который вы используете, кажется непригодным для правильного разбора.

Вы можете увидеть различия в следующих примерах:

 echo strtotime('3rd January,2010')."<BR>"; echo strtotime('3 January, 2010')."<BR>"; echo strtotime('January 3rd, 2010')."<BR>"; echo strtotime('January 3, 2010')."<BR>"; 

результаты:

 1231042200 1231042200 1262505600 1262505600 

Первые два возвращают другую временную метку, чем последние два. Из форматов последние два более семантически (по-английски) правильные, и я бы попытался их использовать.

РЕДАКТИРОВАТЬ

Как отмечали другие плакаты, запятая смущает парсер о частичной дате из-за порядка ваших токенов.

 echo strtotime('3rd January 2010')."<BR>"; 

возвращает правильную временную метку для вашего формата.