PHP datetime-> формат: Неделя года и Year приводят к числам, которые не имеют смысла вместе

#php #time #php-5.6

#php #datetime

Вопрос:

Я пытаюсь получить год и неделю года от заданной даты в моем коде:

 $dueDate->format('W , Y');
  

В приведенном выше коде duedate — это объект datetime с этим значением даты:

 December 31, 2018
  

Когда я вывожу формат, который я указал выше, я получаю это:

 01 , 2018
  

При рассмотрении каждого значения отдельно функция верна. Однако вместе это сбивает с толку.

Похоже, что 31 декабря считается первой неделей, потому что оно выпадает на понедельник, так что технически это правильно, это первая неделя 2019 года. Однако в этом случае я бы хотел, чтобы год перевернулся и читался как 2019.

Как я могу разрешить это, чтобы перенести год только в этом случае? Приветствуется любая помощь.

Ответ №1:

Вам нужно использовать год нумерации недель по стандарту ISO-8601, который является o, если вы хотите указать год для недели по стандарту ISO-8601. Из документов:

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

 $dueDate->format('W , o');