У меня есть эта маленькая функция, позволяющая мне форматировать дату:
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
,
Вы помогаете мне найти почему?
Благодарю.
strftime
ожидает отметку времени UNIX, а не строку даты.
Необязательный параметр timestamp — это целочисленная метка времени Unix, которая по умолчанию принимает текущее местное время, если метка времени не указана. Другими словами, по умолчанию используется значение time ().
http://php.net/manual/en/function.strftime.php
Вы можете добавить метку времени UNIX, возвращенную time()
или преобразовать ввод в метку времени:
<?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
Других решений пока нет …