Неправильный возврат даты после использования 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,

Вы помогаете мне найти почему?

Благодарю.

0

Решение

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

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]