Moment.js周数从MySQL
不同于docs for Moment.js,它根据ISO 8601Moment.js周数从MySQL
从wikipedia page for ISO 8601说moment().startOf('isoWeek')
套在一周的第一天,它说的第一个星期是(其他等效定义中):第一周的大部分时间(四个或更多)在开始的一年。
从docs for MySQL,它说WEEK(date, 3)
给出了一周(1-53),周一为第一周的第一天,今年有4天或更多天。
从我可以告诉,这些都是一个星期的所有等效定义,但他们没有网格。
我的MySQL数据库(v5.6.17)给了我201616
为SELECT YEARWEEK('2016-4-20',3)
在浏览器中使用Moment.js(v2.10.3)给了我Mon Apr 11 2016
为moment().year(2016).week(16).startOf("isoweek")
这些都不是在同一个星期,我无法弄清楚为什么。
当您拨打.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星期编号和星期开始。
您是不是应该设置'isoWeekYear'而不是'year'?例如,2016年初的ISO年可能是2015年。 – Brendon
@ Brendon-我不知道为什么OP在设定年度,我只是指出了差异。设置* isoWeekYear *将当天设置为当年同一周的同一天。在1月1日左右,它可以将日期改变大约12个月,例如2016年1月1日星期五是2015年ISO第53周,2016年ISO设置将其转换为星期五(2016年1月1日).iso(2016年1月1日).isoWeekYear(2016).format在2016年的第53周,即2016年12月30日。 – RobG
我不知道OP的意图是什么,但他提到了MySQL的'YEARWEEK'功能,所以他可能有兴趣设置周年而不是年。即使OP没有使用ISO标准的周年和周数,他也需要使用#weekYear而非#moment的时间。 – Brendon
2016年4月11日确实是2016年第15周的ISO开始,而4月20日是16日(尽管周一18是该周的ISO开始)。我认为你的语法是错误的:'时刻('2016-W16')'设定2016-04-18的日期,即星期一在第16周开始。 – RobG