我如何获得日期和月份的区域设置?

时间:2010-09-16 17:15:18

标签: php datetime date time locale

我正在使用以下功能来检索日期和时间:

  function formatEventTime($time, $type, $locale = 'nb_NO') {
    setlocale(LC_TIME, $locale);

    switch($type) {
      case 'date' :             $format = '%d.%m'; break;
      case 'dm'   :             $format = '%d. %B'; break;
      case 'time' :             $format = '%H:%M'; break;
      case 'dmy'  :         $format = '%d.%m.%Y'; break;
    }
    return strftime($format, strtotime($time));
  }

wher $time = 2010-12-03 10:00:00。 问题是我的日子和月份仍然是英文。如何将其更改为例如挪威?

更新
这适用于我的服务器,但不适用于我的语言环境机器。

3 个答案:

答案 0 :(得分:7)

使用IntlDateFormatter::format

示例:

<?php
$df = new IntlDateFormatter('nb_NO',
    IntlDateFormatter::FULL, IntlDateFormatter::FULL,
    'Europe/Oslo');
echo $df->format(time());

给出:

torsdag 16. september 2010 kl. 21.23.03 Norge

答案 1 :(得分:6)

您必须使用strftime()而不是date()。

  

如果没有给出时间戳,则返回使用给定时间戳或当前本地时间格式化的字符串。月份和工作日名称以及其他依赖于语言的字符串遵循使用setlocale()设置的当前语言环境。

答案 2 :(得分:5)

我知道这个话题很老但我今天遇到了同样的问题。日期在我的linux机器上正确显示,但在我的Windows机器上它们仍然是英文版。

如果你想让它在linux和windows机器上工作,你必须小心使用setlocale()函数。在linux上你必须使用'nb_NO'(例如)用于挪威语格式,在windows上你必须使用'norwegian':

if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') {
    setlocale(LC_ALL, 'norwegian');
} else {
    setlocale(LC_ALL, 'nb_NO');
}

您可以在MSDN中找到适用于Windows的语言代码列表。

相关问题