【问题标题】:date() returns wrong week number for first day of yeardate() 为一年中的第一天返回错误的周数
【发布时间】:2021-07-28 22:27:35
【问题描述】:

函数date() 的返回值在这里毫无意义。有人知道为什么吗?

也许我遗漏了一些东西,但根据 PHP 手册,以下内容没有意义:

echo date('W', strtotime("2021-01-01"));

输出:

53

一年的第一天不应该在第 1 周吗?其他日期似乎也被破坏了(例如 2021-01-05 返回 01 )。 我检查了strtotime() 的输出,但 UNIX 时间戳似乎是正确的。我在这里错过了什么?

【问题讨论】:

  • 如果元旦是星期六,我怀疑 05 可能是第二周。但是,请检查您的日期格式

标签: php date


【解决方案1】:

PHP 的DateTime format doc:

W - ISO-8601 一年中的周数,从星期一开始的周数

ISO-8601 对一年中第一周的定义:

每周从星期一开始,到星期日结束。每周的年份是星期四所在的公历年。因此,一年的第一周总是包含 1 月 4 日

它返回 53,因为 01/01/2021 是在 2020 年的第 53 周。

如果你这样做

echo date('W', strtotime("2021-01-04")); // first Monday of year 2021

它将返回01

【讨论】:

  • 这是正确的,但你有一个如何获得日历年正确周数的例子吗?在这种情况下,1 代表 2021-01-01
  • @AbraCadaver:我认为没有内置函数可以做到这一点,因为它不是标准。如果你想要一个,那么你必须自己使用数学来构建它。
【解决方案2】:

一年的第一天不应该在第 1 周吗?

就像@catcon 所说,不。

要回答您的评论,

这是正确的,但是您有一个示例来说明如何获取日历年的正确周数吗?在这种情况下 1 表示 2021-01-01

z = The day of the year (starting from 0)   0 through 365

从那里,得到一年中的哪一天,从 365 或 366 中减去,除以 7,从一年中的周数中减去 (365/7)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-13
    • 1970-01-01
    • 1970-01-01
    • 2014-12-30
    • 1970-01-01
    • 1970-01-01
    • 2023-04-11
    • 1970-01-01
    相关资源
    最近更新 更多