我有这个小功能,允许我格式化日期:
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
。
你帮我找到原因吗?
感谢。
答案 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');
}