Moment.js 周数不同于 MySQL
Moment.js week number differs from MySQL
从 docs for Moment.js 开始,它说 moment().startOf('isoWeek')
根据 ISO 8601 设置为一周的第一天。
从 wikipedia page for ISO 8601 开始,它说第一周是(在其他等效定义中):第一周的大部分(四天或更多)天数在起始年。
从docs for MySQL开始,它说WEEK(date, 3)
给出一个星期(1-53),以星期一为第一周的第一天,今年有4天或更多天。
据我所知,这些都是一周的等效定义,但它们并不相符。
我的 MySQL 数据库 (v5.6.17) 为 SELECT YEARWEEK('2016-4-20',3)
提供 201616
在浏览器中使用 Moment.js (v2.10.3) 为 moment().year(2016).week(16).startOf("isoweek")
提供 Mon Apr 11 2016
那些不是同一周,我不明白为什么。
当您调用 .week()
时,您正在设置 "locale" 周(我不知道 moment.js 是如何计算出来的),但第一天可能是星期日。当您随后调用 .startOf('isoweek')
时,您将获得该周的 ISO 开始,即前一个星期一。
要用ISO,就得用ISO方法,所以:
moment().year(2016).isoWeek(16).startOf('isoweek');
为 2016-04-18T00:00:00 创建时刻对象
或使用字符串:
moment('2016-W16') // 2016-04-18T00:00:00
默认为 ISO 周编号和一周的开始。
从 docs for Moment.js 开始,它说 moment().startOf('isoWeek')
根据 ISO 8601 设置为一周的第一天。
从 wikipedia page for ISO 8601 开始,它说第一周是(在其他等效定义中):第一周的大部分(四天或更多)天数在起始年。
从docs for MySQL开始,它说WEEK(date, 3)
给出一个星期(1-53),以星期一为第一周的第一天,今年有4天或更多天。
据我所知,这些都是一周的等效定义,但它们并不相符。
我的 MySQL 数据库 (v5.6.17) 为 SELECT YEARWEEK('2016-4-20',3)
201616
在浏览器中使用 Moment.js (v2.10.3) 为 moment().year(2016).week(16).startOf("isoweek")
Mon Apr 11 2016
那些不是同一周,我不明白为什么。
当您调用 .week()
时,您正在设置 "locale" 周(我不知道 moment.js 是如何计算出来的),但第一天可能是星期日。当您随后调用 .startOf('isoweek')
时,您将获得该周的 ISO 开始,即前一个星期一。
要用ISO,就得用ISO方法,所以:
moment().year(2016).isoWeek(16).startOf('isoweek');
为 2016-04-18T00:00:00 创建时刻对象
或使用字符串:
moment('2016-W16') // 2016-04-18T00:00:00
默认为 ISO 周编号和一周的开始。