【发布时间】:2011-08-02 10:53:34
【问题描述】:
我有这个 MySQL 查询,它返回两个日期(都被格式化为 a-m-Y)。现在我想把这个日期翻译成我自己的语言(丹麦语)。我怎样才能做到这一点。 我已经尝试了 setlocale() 和 strftime() 函数,但它不起作用。 我知道这是一个非常基本的问题,但我真的需要帮助 :) 非常感谢!
【问题讨论】:
我有这个 MySQL 查询,它返回两个日期(都被格式化为 a-m-Y)。现在我想把这个日期翻译成我自己的语言(丹麦语)。我怎样才能做到这一点。 我已经尝试了 setlocale() 和 strftime() 函数,但它不起作用。 我知道这是一个非常基本的问题,但我真的需要帮助 :) 非常感谢!
【问题讨论】:
我发现setlocale 不可靠,因为它是按进程设置的,而不是按线程设置的(手册中提到了这一点)。这意味着其他正在运行的脚本可以随时更改语言环境。一个解决方案是使用intl php 扩展中的IntlDateFormatter。
如果需要,安装 intl (ubuntu):sudo apt-get install php5-intl
安装你要使用的语言环境(我以意大利语为例):sudo locale-gen it_IT
生成本地格式化的日期:
$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());
// Output: 6 gennaio 2016 12:10
【讨论】:
使用
http://php.net/manual/en/function.strftime.php
<?php
setlocale(LC_ALL, 'da_DA');
echo strftime("%A %e %B %Y");
?>
【讨论】:
我认为date() 功能对你来说还不够进化,在这里。
相反,我建议您查看IntlDateFormatter1 类(引用):
Date Formatter 是一个具体的类,它使 依赖于语言环境 格式化/使用模式字符串和/或罐装日期解析 模式。
IntlDateFormatter::format() 的手册页上有几个示例,该方法用于通过设置所需的语言环境以两种不同的语言显示日期。
1.与 PHP >= 5.3 捆绑
【讨论】:
如果您想要挪威日期和月份格式,这肯定适合您
$date = '2016-11-16 05:35:14';
setlocale(LC_TIME, array('nb_NO.UTF-8','nb_NO@norw','nb_NO','norwegian'));
echo strftime("%e %b %Y",strtotime($date));
如果您想获得其他语言区域设置 ID,例如 nb_NO,请参考此网站 International Components for Unicode (ICU) Data
【讨论】:
同时使用setlocale 和strftime:
setlocale(LC_TIME, array('da_DA.UTF-8','da_DA@euro','da_DA','danish'));
echo strftime("%A"); // outputs 'tirsdag'
适用于我在 Windows 上的 php 安装。
【讨论】:
strftime 的返回值存储在一个变量中:$date = strftime("%A");
如果您尝试转换 datetime,请尝试以下操作:
$fecha = $dateConsulta->format('d-M-Y');
$fecha = str_replace('Jan','Ene',$fecha);
$fecha = str_replace('Apr','Abr',$fecha);
$fecha = str_replace('Aug','Ago',$fecha);
$fecha = str_replace('Dec','Dic',$fecha);
【讨论】: