【问题标题】:Date function output in a local language [duplicate]本地语言的日期函数输出[重复]
【发布时间】:2021-06-19 05:40:51
【问题描述】:

我正在尝试使用date() 以意大利语格式输出日期,如下所示:

<?php 
    setlocale(LC_ALL, 'it_IT');
    echo date("D d M Y", $row['eventtime']); 
?>

但是,它仍然以英文格式出现。我还能做什么?有什么问题吗?

解决方案必须是特定于脚本的,而不是服务器范围的。

【问题讨论】:

  • 我在这里使用了您的解决方案:inmaremma.net 只是重音字符呈现为问号。我相信我用 正确地将 html 语言设置为意大利语
  • @AdiCumpanasu 您可能还需要将字符集设置为 UTF-8。将以下内容放在&lt;head&gt;&lt;/head&gt; 之间:&lt;meta charset="utf-8"&gt;
  • 解决了这样的包装问题:utf8_encode(strftime("%A %d %B %Y"))

标签: php date


【解决方案1】:

date() 不支持区域设置。您应该使用strftime() 及其格式说明符来输出可识别区域设置的日期(来自date() PHP 手册):

要格式化其他语言的日期, 你应该使用setlocale()strftime() 函数而不是 date().

关于Anti Veeranna 的评论:他是绝对正确的,因为您必须非常小心设置语言环境,因为它们有时不限于当前脚本范围。最好的办法是:

$oldLocale = setlocale(LC_TIME, 'it_IT');
echo utf8_encode( strftime("%a %d %b %Y", $row['eventtime']) );
setlocale(LC_TIME, $oldLocale);

【讨论】:

  • 请记住,setlocale 不是特定于脚本的,它是特定于线程的,因此语言环境可能会在您的“下方”发生变化。 ee.php.net/setlocale 也解释了。
  • 它甚至不仅仅是线程特定的,它是进程特定的。因此,您也可以更改其他正在运行的 PHP 实例。 (php.net/manual/en/…)
【解决方案2】:

我发现setlocale 不可靠,因为它是按进程设置的,而不是按线程设置的(手册中提到了这一点)。这意味着其他正在运行的脚本可以随时更改语言环境。一个解决方案是使用intl php 扩展中的IntlDateFormatter

$fmt = new \IntlDateFormatter('it_IT', NULL, NULL);
$fmt->setPattern('d MMMM yyyy HH:mm'); 
// See: http://userguide.icu-project.org/formatparse/datetime for pattern syntax
echo $fmt->format(new \DateTime()); 

如果它不起作用,您可能需要:

  • 安装intl php 扩展(ubuntu 示例):sudo apt-get install php5-intl

  • 安装您要使用的语言环境:sudo locale-gen it_IT

【讨论】:

  • 这个解决方案比公认的答案更可靠(安装了intl php 扩展并提供了适当的语言环境)
【解决方案3】:

it_IT 语言环境必须由您的服务器管理员安装/启用,否则这将不起作用。

所以,乔纳森的解决方案可能是最好的。

【讨论】:

  • 我可以完全访问服务器,有什么想法可以检查安装了哪些本地?
  • 如果该服务器正在运行 Linux/BSD 的某些变体,则键入“locale -a”。
  • 在服务器上检查和安装语言环境:askubuntu.com/a/76106
【解决方案4】:

关于http://www.phpnews.it/articoli/ottenere-date-in-italiano/response上的文章,博客提出了另一种方法,但是代码不起作用,这里是正确的代码:

function timestamp_to_date_italian($date)
    {       
        $months = array(
                '01' => 'Gennaio', 
                '02' => 'Febbraio', 
                '03' => 'Marzo', 
                '04' => 'Aprile',
                '05' => 'Maggio', 
                '06' => 'Giugno', 
                '07' => 'Luglio', 
                '08' => 'Agosto',
                '09' => 'Settembre', 
                '10' => 'Ottobre', 
                '11' => 'Novembre',
                '12' => 'Dicembre');

        list($day, $month, $year) = explode('-',date('d-m-Y', $date));      
        return $day . ' ' . $months[$month] . ' ' . $year;

    }

【讨论】:

    猜你喜欢
    • 2021-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-25
    • 1970-01-01
    相关资源
    最近更新 更多