2013-12-11 4 views
1

Используя этот код годас использованием STRFTIME на 31 декабря показывает следующий

setlocale(LC_ALL, 'fr_FR'); 
    $end_date_formatted = utf8_encode(strftime("%d %B %G", mktime(0, 0, 0, $month_end, $day_end, $year_end))); 

STRFTIME не возвращается правильный год только 31 декабря он должен показать 31 Decembre 2013, но он отображает 31 Decembre 2014

+3

Какие значения передаются для '$ day_end, $ month_end, $ year_end'? –

ответ

3

Вы: Операции: были использованы с кодом mktime(). Это:

ИНТ указываете ей ([INT $ час = дата ("H") [, Int $ минута = дата ("я") [, Int $ второй = дата ("s") [, Int $ месяц = дата ("п") [, Int $ день = дата ("J") [, Int $ год = дата ("Y") [, Int $ is_dst = -1]] ]]]]])

... и у вас есть:

mktime(0, 0, 0, $day_end, $month_end, $year_end) 

Фиксированные, что вы, вероятно, ударяя вопрос о том, что note in the strftime() manual page предупреждает о:

Примечание:% G и% V, которые основаны на ISO 8601: 1988 номер недели может дать неожиданный (хотя и правильно) результаты если система нумерации не полностью понят. См. Примеры% V на этой странице руководства.

31 декабря 2013 года относится к первой неделе ИСО следующего года.

Вместо этого вы, скорее всего, захотите %Y.

+0

Это объяснит это, добавив что-нибудь более 12 будет автоматически подталкивать год вверх –

+0

мой плохой, его mktime (0, 0, 0, $ month_end, $ day_end, $ year_end). отредактировал вопрос – Aditya

+0

, который исправил его, спасибо – Aditya