Я пытался преобразовать дату «ГГГГ / ММ / ДД» в формат «ГГГГ / WW», поэтому я могу хранить еженедельные данные агрегации, которая имеет структуру ниже
aggre_date(YYYY/WW) value id
Но я нашел неприятную проблему
$dateTime = new DateTime("2014-12-30"); echo $dateTime->format("YW")."\n"; $dateTime = new DateTime("2014-01-01"); echo $dateTime->format("YW")."\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("oW")."\n"; $dateTime = new DateTime("2014-01-01"); echo $dateTime->format("oW")."\n"; 2015-01 2014-01
демонстрация