strtotime ('3 января 2010 года) возвращает 1230993600 в GMT + 5: 30.
Хотя согласно этому , временная отметка unix 1230993600 – 3 января 2009 года . Так что он отключен на один год.
Это происходит на PHP 5.2.6, а также 5.2.11.
Проблема заключается в строке даты. Кажется, что он отделяет дату от элементов времени в вашей строке, так как
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>";
возвращает правильную временную метку для вашего формата.