Получить формат даты в соответствии с локалью в PHP - PullRequest
9 голосов
/ 12 января 2012

Есть очень простая проблема.У меня есть идентификатор локали, en, en_US, cs_CZ или что-то еще.Мне просто нужно получить формат даты и времени для этой локали.Я знаю, что могу легко отформатировать любую метку времени или дату в соответствии с локалью.Но мне нужно только строковое представление формата даты , скажем, регулярное выражение.Есть ли функция, управляющая этой функциональностью?Я пока не нашел ...

Пример:

$locale = "en_US";
$format = the_function_i_need($locale);
echo $format; // prints something like "month/day/year, hour:minute"

Ответы [ 4 ]

2 голосов
/ 12 января 2012

конвертируется из комментария:

вам нужно будет построить массив со списком возможностей.

http://en.wikipedia.org/wiki/Date_format_by_country должно помочь.

опубликуйте функцию где-нибудь, когда закончите, я уверен, что она пригодится другим

2 голосов
/ 09 сентября 2012

Я пытаюсь сделать то же самое сам. Вместо того, чтобы строить массив всех стран, как насчет использования регулярных выражений для определения формата?

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()));
}
1 голос
/ 21 января 2017
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 .

0 голосов
/ 12 января 2012

Используйте strftime() в сочетании с setlocale(). Похоже, это то, что вы ищете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...