Я пытался преобразовать дату «ГГГГ / ММ / ДД» в формат «ГГГГ / 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
,
Есть ли способ улучшить мой дизайн данных еженедельной агрегации или получить «правильный» год?
Вам нужно использовать 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
Других решений пока нет …