Вероятно, не лучшее решение когда-либо (потому что оно терпит неудачу, если нет действительного перевода), но оно работает для моего случая.
я есть некоторый код (это часть плагина WordPress), который принимает текстовую строку и спецификатор формата, заданный для date (), и пытается разобрать его в массив, содержащий часы, минуты, секунды, день, месяц, год.
В настоящее время я использую следующий код (обратите внимание, что strtotime ужасно ненадежен с такими вещами, как 01.02.03)
// $format contains the string originally given to date(), and $content is the rendered string
if (function_exists('date_parse_from_format')) {
$content_parsed = date_parse_from_format($format, $content);
} else {
$content = preg_replace("([0-9]st|nd|rd|th)","\\1",$content);
$content_parsed = strptime($content, dateFormatToStrftime($format));
$content_parsed['hour']=$content_parsed['tm_hour'];
$content_parsed['minute']=$content_parsed['tm_min'];
$content_parsed['day']=$content_parsed['tm_mday'];
$content_parsed['month']=$content_parsed['tm_mon'] + 1;
$content_parsed['year']=$content_parsed['tm_year'] + 1900;
}
Это на самом деле работает довольно хорошо, и, кажется, справляется со всеми комбинациями, которые я выбрасывал.
Однако недавно кто-то дал мне24 Ноябрь, 2010
, Это русский на 24 ноября 2010 года [формат даты былj F, Y
] и анализируется как год = 2010, месяц = ноль, день = 24.
Могу ли я использовать какие-либо функции, которые умеют переводить как ноябрь, так и ноябрь в 11?
РЕДАКТИРОВАТЬ:
Бегprint_r(setlocale(LC_ALL, 0));
возвращаетсяC
, Переключение обратно наstrptime()
кажется, чтобы решить проблему, но документы предупреждают:
Внутренне эта функция вызывает функцию strptime (), предоставляемую системной библиотекой C. Эта функция может демонстрировать заметно различное поведение в разных операционных системах. Использование date_parse_from_format (), которое не страдает от этих проблем, рекомендуется в PHP 5.3.0 и более поздних версиях.
Являетсяdate_parse_from_format()
правильный API, и если да, то как мне заставить его распознавать язык?