Получить & quot; Право & quot; Год определенной даты с PHP DateTime

Я пытался преобразовать дату «ГГГГ / ММ / ДД» в формат «ГГГГ / WW», чтобы я мог хранить данные еженедельной агрегации, структура которых представлена ​​ниже

aggre_date(YYYY/WW)    value    id

Но я нашел неприятную проблему

$dateTime  = new DateTime("2014-12-30");
echo $dateTime->format("Y-W")."\n";
$dateTime  = new DateTime("2014-01-01");
echo $dateTime->format("Y-W")."\n";

Результат точно такой же 2014-01, но первый должен быть 2015-01,

Есть ли способ улучшить мой дизайн данных еженедельной агрегации или получить «правильный» год?

1

Решение

Вам нужно использовать o для года ISO:

ISO-8601 год номер. Он имеет то же значение, что и Y, за исключением того, что если номер недели ISO (W) относится к предыдущему или следующему году, вместо этого используется этот год. (добавлено в PHP 5.1.0)

$dateTime  = new DateTime("2014-12-30");
echo $dateTime->format("o-W")."\n";
$dateTime  = new DateTime("2014-01-01");
echo $dateTime->format("o-W")."\n";

2015-01
2014-01

демонстрация

4

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

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

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