在PHP中使用strftime后错误的日期返回

时间:2016-12-27 22:40:35

标签: php strftime

我有这个小功能,允许我格式化日期:

function formatDateTime($date, $lang) {
    setlocale(LC_TIME, $lang);
    return strftime('%A %e %B %Y', $date);
}

我这样使用它:

formatDateTime('2016-12-27', 'fr_FR');

我遇到的问题是函数在法语jeudi 1 janvier 1970中返回错误的日期。

应为Mardi 27 décembre 2016

你帮我找到原因吗?

感谢。

1 个答案:

答案 0 :(得分:1)

strftime需要UNIX时间戳,而不是日期字符串。

  

可选的timestamp参数是整数Unix时间戳,如果未给出时间戳,则默认为当前本地时间。换句话说,它默认为time()的值。

http://php.net/manual/en/function.strftime.php

您可以输入time()返回的UNIX时间戳,也可以将输入转换为时间戳:

<?php

function formatDateTime($date, $lang) {
    setlocale(LC_TIME, $lang);

    if(is_numeric($date)) {
        /* UNIX timestamps must be preceded by an "@" for the DateTime constructor */
        $datetime = new DateTime('@' . $date);
    }
    else {
        /* …anything else is fine (mostly) fine to digest for DateTime */
        $datetime = new DateTime($date);
    }

    /* Now use strftime() or… */
//  return strftime('%A %e %B %Y', $datetime->getTimestamp());

    /* …instead of using strftime() it now may be better to use
     * the format() method from the DateTime object:*/
    return $datetime->format('%A %e %B %Y');
}

另请参阅:http://php.net/datetime