Неправильный вывод в strftime() и mktime()

Это моя маленькая функция:

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, и это должно работать, не знаю, что не так. Любая идея или предложение?

С наилучшими пожеланиями


person Denny Mueller    schedule 12.07.2013    source источник


Ответы (1)


Функция setlocale возвращает false, если локаль не может быть установлена, и вы игнорируете возвращаемое значение. В этом случае вызов должен быть неудачным (возможно, из-за того, что локаль de_DE не установлена?), а strftime по-прежнему форматирует даты на английском языке.

С другой стороны, день 0 соответствует "последнему дню предыдущего месяца". Итак, mktime возвращается 30 апреля, а не 1 мая, если вы этого ожидаете. На 1 мая используйте это:

mktime(0,0,0, $date_array[0], 1, $date_array[1])
person Joni    schedule 12.07.2013
comment
Спасибо, изменение дня = 0 на день = 1 было решением. - person Denny Mueller; 12.07.2013