【问题标题】:DateTime 2018 and 2019 week count PHP bug?DateTime 2018 和 2019 周数 PHP 错误?
【发布时间】:2017-02-28 19:53:08
【问题描述】:

想要获得一年中的最长周数,并认为这是获得此数字的最简单方法,但令我惊讶的是,一年中的最后一天可能是第一周。这是因为这些天是在一周的前半段吗?
所以我知道如何得到正确的数字,我只是想知道逻辑。

<?php
echo (new DateTime('2016-12-31 00:00:00'))->format('W'); //52

echo (new DateTime('2017-12-31 00:00:00'))->format('W'); //52

echo (new DateTime('2018-12-31 00:00:00'))->format('W'); //01
echo (new DateTime('2018-12-30 00:00:00'))->format('W'); //52

echo (new DateTime('2019-12-31 00:00:00'))->format('W'); //01
echo (new DateTime('2019-12-30 00:00:00'))->format('W'); //01
echo (new DateTime('2019-12-29 00:00:00'))->format('W'); //52

echo (new DateTime('2020-12-31 00:00:00'))->format('W'); //53

通过已回答的链接找到(维基百科):

上周

ISO 周编号年份的最后一周,即第 52 或第 53 一,是第01周的前一周。本周的属性是:

里面有今年的最后一个星期四。

这是最后一周,大部分(4 天或更多)天在 十二月。

它的正午,星期四,正好是年末的一年。

最后一天是最接近 12 月 31 日的星期日。

里面有 12 月 28 日。因此,最晚可能的日期是 28 12 月至 1 月 3 日,最早的 12 月 21 日至 28 日。

如果 12 月 31 日是星期一、星期二或星期三,则为第 01 周 明年的。如果是星期四,则在一年的第 53 周 刚刚结束;如果在星期五,则在第 52 周(或 53,如果年份刚刚 结束是闰年);如果在星期六或星期日,则在第 52 周 刚刚结束的一年

【问题讨论】:

标签: php datetime


【解决方案1】:

它可能在关注the ISO week date system。引用那篇维基百科文章:

第 1 周的 ISO 8601 定义是包含一年中第一个星期四的那一周。

【讨论】:

    【解决方案2】:

    如果你想得到一年中的最后一周,你可以使用这个简单的函数:

    function getIsoWeeksInYear($year) {
      $date = new DateTime;
      $date->setISODate($year, 53);
      return ($date->format("W") === "53" ? 53 : 52);
    }
    

    【讨论】:

    • 谢谢,我打算从最后一天开始逐日减去,或者从年初开始逐周加上,得到最大的数。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多