Ошибка php datetime?

У меня проблема с функциями DateTime php. Сегодня понедельник 3 декабря.

Предполагая следующий код:

$dte = new DateTime(date('Ymd H:i:s')); var_dump($dte->format('Y-W')); $dte->modify('+4 weeks'); var_dump($dte->format('Ymd H:i:s -- Y_W')); $dte->modify('+1 days'); var_dump($dte->format('Ymd H:i:s -- Y_W')); 

Через четыре недели это будет 31 декабря. Я бы заподозрил получить последнюю неделю года (52?). Но я получаю неделю 1 2012 года, как вы можете видеть в следующем выпуске.

 string '2012-49' (length=7) string '2012-12-31 14:48:00 -- 2012_01' (length=30) string '2013-01-01 14:48:00 -- 2013_01' (length=30) 

Поэтому моя проблема в том, что после первой модификации, я думаю, мне нужно:

 2012-12-31 14:48:00 -- 2012_52 

но вместо этого я получаю

 2012-12-31 14:48:00 -- 2012_01 

Итак, почему неделя возвращается к 01 без увеличения года, и почему другая линия дает мне 2013_01?

EDIT :: Теперь я вижу, что за неделю до этого неделя 52, что-нибудь связанное с високосным годом? Но опять же, как может неделя вернуться к 01 без увеличения года?

Solutions Collecting From Web of "Ошибка php datetime?"

Итак, почему неделя возвращается к 01 без увеличения года, и почему другая линия дает мне 2013_01?

Я думаю, что вы показываете «год» вместо «недельного года». Когда вы используете номера недель, именно эта неделя – это соответствующая часть; простой «год» имеет значение только в отношении месяца и дня.

EDIT: Я думаю, вам нужен спецификатор формата o , поэтому попробуйте:

 var_dump($dte->format('Ymd H:i:s -- o_W')); 

Это должно показать вам 2013_01 на 31 декабря 2012 года, как и на неделе 1 недели-2013.

В принципе, я не думаю, что это ошибка в DateTime – это просто непонимание того, как предполагается использовать «неделю года».

Кажется, это не ошибка. Согласно документации W вернет ISO-8601 недельный номер года, недели, начиная с понедельника (добавлен в PHP 4.1.0), а так как Mon, 31 Dec 2012 15:04:46 +0100 в понедельник будет 1 вместо 52 ,

Дополнительная информация о Википедии и этом хорошем сайте .