【问题标题】:Wrong output on strftime() and mktime()strftime() 和 mktime() 上的错误输出
【发布时间】:2013-07-10 18:45:00
【问题描述】:

这就是我的小功能:

setlocale(LC_TIME, 'de_DE');
$date_array = array($blog_month,$blog_year);
var_dump($date_array); 
$title_date = strftime("%B %Y", mktime(0,0,0, $date_array[0], 0, $date_array[1]));
echo $title_date;

var_dump 给出

array(2) {
  [0]=> int(5)
  [1]=> int(2013)
}

所以数组是正确的。 但是$title_date 总是错的。在这种特殊情况下,回显显示April 2013。 我猜mktime 有问题,因为我检查了它给出的timestamp,它总是错误的。

我确实阅读了 PHP 文档,这应该可以工作,不知道出了什么问题。 有什么想法或建议吗?

最好的问候 否认

【问题讨论】:

    标签: php strftime mktime


    【解决方案1】:

    如果无法设置语言环境,setlocale 函数将返回 false,而您忽略了返回值。在这种情况下,调用一定是失败的(可能是因为没有安装 de_DE 语言环境?)并且strftime 仍然用英文格式化日期。

    另一方面,第 0 天对应于“last day of the month before”。所以mktime 将在 4 月 30 日返回,而不是 5 月 1 日,如果这是您所期望的。对于 5 月 1 日,请使用:

    mktime(0,0,0, $date_array[0], 1, $date_array[1])
    

    【讨论】:

    • 感谢将 day = 0 更改为 day = 1 是解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-23
    • 1970-01-01
    • 2015-06-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多