【发布时间】:2010-03-18 20:28:40
【问题描述】:
echo date("W",strtotime('2010-01-01'));
这输出 53。我希望它输出 1。其他人可以确认这种行为,或者解释原因吗?我找不到关于它的错误报告。
【问题讨论】:
echo date("W",strtotime('2010-01-01'));
这输出 53。我希望它输出 1。其他人可以确认这种行为,或者解释原因吗?我找不到关于它的错误报告。
【问题讨论】:
这根本不是错误,而是预期的行为。来自 PHP 的Date Page:
W:ISO-8601 一年中的周数,从星期一开始的周数
2010 年 1 月 1 日是星期五,所以它的周数属于 2009 年,因此它是 2009 年第 53 周的一部分。2010 年 1 月 4 日是第 1 周。
【讨论】:
从 12 月开始到次年 1 月结束的一周属于其大部分日子所在的年份。因此,12 月至少有 4 天的一周是当年的最后一周,而 1 月至少有 4 天的一周是新年的第一周。
所以...一年的最后一周总是包含 12 月的第 28 天。如果您在给定年份的那一天取日期(“W”),您总是会得到该年正确的周数。该定义的另一端是一月的第四天总是在一年的第一周。
【讨论】:
它返回ISO-8601 week number of year。
来自Wikipedia:
第 1 周有相互等价的描述:
- 包含一年中第一个星期四的那一周(正式的 ISO 定义),
- 1 月 4 日所在的那一周,
- 大部分(四天或更多)天在起始年份的第一周,并且
- 从 12 月 29 日至 1 月 4 日期间的星期一开始的那一周。
由于2010-01-01 是星期五,不满足任何条件。
【讨论】: