Существует очень простая проблема. У меня есть идентификатор локали, en, en_US, cs_CZ или что-то еще. Мне просто нужно получить формат даты и времени для этой локали. Я знаю, что я могу легко форматировать любую временную метку или объект даты в соответствии с локалью. Но мне нужно просто строковое представление формата даты , скажем, регулярное выражение. Есть ли функция, управляющая этой функциональностью? Я пока не нашел …
Exapmle:
$locale = "en_US"; $format = the_function_i_need($locale); echo $format; // prints something like "month/day/year, hour:minute"
преобразован из комментария:
вам нужно будет построить массив со списком возможностей.
http://en.wikipedia.org/wiki/Date_format_by_country должно помочь.
после выполнения функции, я уверен, что это будет полезно для других
Я тоже пытаюсь сделать то же самое. Вместо того, чтобы создавать массив из всех стран, как насчет использования регулярного выражения для определения формата?
setlocale(LC_TIME, "us_US"); // returns 'mdy' $type1 = getDateFormat(); setlocale(LC_TIME, "fi_FI"); // returns 'dmy' $type2 = getDateFormat(); setlocale(LC_TIME, "hu_HU"); // returns 'ymd' $type3 = getDateFormat(); /** * @return string */ function getDateFormat() { $patterns = array( '/11\D21\D(1999|99)/', '/21\D11\D(1999|99)/', '/(1999|99)\D11\D21/', ); $replacements = array('mdy', 'dmy', 'ymd'); $date = new \DateTime(); $date->setDate(1999, 11, 21); return preg_replace($patterns, $replacements, strftime('%x', $date->getTimestamp())); }
function getDateFormat($locale) { $formatter = new IntlDateFormatter($locale, IntlDateFormatter::SHORT, IntlDateFormatter::NONE); if ($formatter === null) throw new InvalidConfigException(intl_get_error_message()); return $formatter->getPattern(); }
Сделайте так, чтобы вы установили intl .
Используйте strftime()
в сочетании с setlocale()
. Похоже, это то, что вы ищете.