将日期翻译为默认语言或选择的语言。

3

我需要展示从数据库中获取的日期,但是这个日期总是以英文形式展示,而我的网站是双语的,即英语和德语。

以下是我的PHP代码:

    setlocale(LC_ALL, "de_DE.utf8");
    ...
    $myDate='2016-06-17'; //example
    echo strftime(date_format(date_create($myDate), "l, j  F Y "))

但是这不起作用,我总是得到英文日期: Friday, 17 June 2016 更新:我可以使用

strftime("%B %e, %G",date_timestamp_get(date_create($myDate))) 

我得到了Juni 17, 2016,但是我失去了这一天的名称,所以我必须同时使用date_format


可能存在重复:http://stackoverflow.com/questions/12716427/output-php-date-with-the-right-language - Alisson Linneker
我不使用date()函数。 - smile 22121
setlocale 的结果是什么?(尝试运行 var_dump(setlocale(LC_ALL, "de_DE.utf8")) - Jocelyn
好的,所使用的区域设置在您的系统上存在。问题则出在其他地方。 - Jocelyn
@AlissonLinneker 这里的 OP 已经像你在链接问题的答案中建议的那样使用了 setlocalestrftime - Jocelyn
显示剩余2条评论
2个回答

3
以下代码将得到预期结果:
setlocale(LC_ALL, "de_DE.utf8");
$myDate='2016-06-17'; //example
echo strftime("%A, %e %B %Y", date_create($myDate)->getTimestamp());

根据文档,strftime 的参数是格式字符串和时间戳。你提供的第二个参数不是时间戳。

你是我的英雄,非常感谢。 - smile 22121

0

主要有两个问题:

  • 不要坚持使用一个正确的日期数据类型,并将其与太多字符串混合在一起。
  • 不要按照文档说明使用函数。

strftime() 函数期望第二个参数为 Unix 时间戳,但 date_format() 返回的是一个字符串(它可以返回带有时间戳的字符串,但由于 l, j F Y 的原因,它并没有)。你还错误地使用了 strftime():第一个参数应该是格式,而不是时间戳。此外,你还在没有任何好处的情况下使用了 DateTime 对象作为代理。

试试更简单的方法:

setlocale(LC_ALL, "de_DE.utf8");
$myDate = strtotime('2016-06-17'); //example
echo strftime('Write proper format there', $myDate);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接