date("YW", strtotime("2016-01-02")); returns “201653”
年份还可以
一周是从2015年开始
PHP 符合 ISO-8601 的日期:
该标准的目的是提供一种明确且定义明确的日期和时间表示方法,以避免对日期和时间的数字表示形式产生误解,特别是当数据在具有不同约定的国家之间传输时。
这意味着一年的第一周定义为:
包含一年中第一个星期四的一周
如果 1 月 1 日是星期一、星期二、星期三或星期四,则在第 01 周。如果 1 月 1 日是星期五、星期六或星期日,则在前一年的第 52 周或第 53 周(没有第 00 周(。
这意味着就 PHP 而言,2016 年 1 月 2 日不是 2016 年的第一周。
如果您使用o
标志date()
您将获得ISO-8601年,该年份将返回2015:
echo date("oW", strtotime("2016-01-02"));
// outputs: 201553
演示
您可能需要考虑的一种方法是检查月份是否为 1 月,周数为 53,则它是新日历年(不是 ISO-8601 年(的第一周。
if (date('n') == 1 && date('W') == 53) {
// first calendar week of the year
}
演示
PHP 使用 ISO-8601 年数,周数从星期一开始。 如果一年的 1 月 1 日不是星期一,则该特定周被视为前一年的最后一周;周 53.
由于 2016 年 1 月 1 日是星期五,因此它是从 2015 年 12 月 28 日开始的一周的一部分。 如果您运行代码echo date('Y-W', strtotime('2015-12-31'));
您将获得输出"2015-53",因此根据 ISO-8601,同一周的天数也将是第 53 周。
PHP 对周数使用 ISO-8601 规范。
一年中第一周的定义(ISO 8601(:
对第 01 周有相互等效的描述:
包含一年第一个星期四的一周(正式的 ISO 定义(,
1月4日这一周,
第一周,其大部分时间(四天或更多(在开始年份,以及
从 12 月 29 日至 1 月 4 日期间的星期一开始的一周。
如果 1 月 1 日是星期一、星期二、星期三或星期四,则在第 01 周。
如果 1 月 1 日是星期五、星期六或星期日,则在前一年的第 52 周或第 53 周(没有第 00 周(。12月28日总是在一年的最后一周。
https://en.wikipedia.org/wiki/ISO_8601#Week_dates
这里有一个例子:
echo date("YW", strtotime("2016-01-02")); //201653
echo date("YW", strtotime("2016-01-04")); //201601