php получает правильную дату на первой неделе года, используя strtotime

0

Я использовал этот код для получения 1-й даты 1-й недели года:

echo date('Y-m-d',strtotime('2018W01'));   #JAN 1 is Monday, returned 01/01
echo date('Y-m-d',strtotime('2013W01'));   #JAN 1 is Tuesday, returned 12/31
echo date('Y-m-d',strtotime('2014W01'));   #JAN 1 is Wednesday, returned 12/30
echo date('Y-m-d',strtotime('2015W01'));   #JAN 1 is Thursday, returned 12/29
echo date('Y-m-d',strtotime('2016W01'));   #JAN 1 is Friday, returned 01/04!? (shouldn't it be 12/28)
echo date('Y-m-d',strtotime('2022W01'));   #JAN 1 is Saturday, returned 01/03!? (shouldn't it be 12/27)
echo date('Y-m-d',strtotime('2017W01'));   #JAN 1 is Sunday, returned 01/02!? (shouldn't it be 12/26)

Поскольку PHP, который больше 5.2.7, показывает мне, что понедельник - 1-й день недели, я надеялся, что 2017 год, 1-й день недели, должен быть 12/26. Есть ли какая-то конфигурация номера недели где-то для PHP, чтобы отображать 1-й день, недели, года правильно, на каждый год? ТИА

Теги:
week-number
strtotime

1 ответ

2
Лучший ответ
echo date('Y-m-d',strtotime('2016W01'));
#JAN 1 is Friday, returned 01/04!? (shouldn't it be 12/28)

Нет, это не должно быть 12/28, потому что первая неделя года имеет следующие правила:

  • Это первая неделя с большинством (4 или более) ее дней в январе.
  • Его первый день - понедельник, ближайший к 1 января.
  • В нем 4 января. Следовательно, самые ранние сроки - с 29 декабря по 4 января, с 4 по 10 января.
  • У него есть первый рабочий день в этом году, если суббота, воскресенье и 1 января не работают.

Если 1 января находится в понедельник, вторник, среду или четверг, это на неделе 01. Если 1 января находится в пятницу, это часть недели 53 предыдущего года; если в субботу это часть 52-й недели (или 53, если предыдущий год был високосным годом); если в воскресенье это часть недели 52 предыдущего года.

Другие примеры также верны. Подробнее читайте здесь.

  • 0
    Это то, чего я боялся ... Есть ли способ настроить PHP так, чтобы он не использовал ISO или систему счисления григорианской недели? Чтобы strtotime 12/28, 12/27 и 12/26? Или единственный способ - обойти и определить, будет ли 1-й год ЯНВ с пятницы по воскресенье, если это так, номер недели минус 1? Неделя не должна начинаться в понедельник, мне просто нужно, чтобы php давал неделю # систематически без особого правила, требующего 4 дня, чтобы считать неделю # 1. Я надеялся, что одного дня будет достаточно, чтобы считать неделю № 1. Спасибо за ответ и TIA
  • 0
    @xam: Я не знаю, зачем вам делать свою логику о нумерации недель? Вы используете стандарт ISO, когда используете формат YEAR-W0x . Если вам нужна какая-то нестандартная логика, вам нужно будет сделать ее самостоятельно, они не являются встроенными функциями; но я бы предпочел использовать стандарт ISO, чем создавать собственную логику ...
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню