我编写了两个简单的函数来使用Moment.js。
第一个函数以日期数组的形式返回一周,给定一周中的任意一天。
var getWeek = function (day) {
var today = day.clone();
var monday = today.clone().startOf('isoWeek');
var sunday = today.clone().endOf('isoWeek');
var days = [];
for (var current = monday.clone(); current.isBefore(today, 'day');
current.add(1, 'days')) {
days.push(current.format());
}
days.push(today.format());
for (var current = today.clone().add(1, 'days');
current.isBefore(sunday, 'day') ||
(current.isSame(sunday, 'day') &&!today.isSame(sunday, 'day'));
current.add(1, 'days')) {
days.push(current.format());
}
return days;
};
第二个函数返回给定任意一天的一年中的星期数。
var dayofweek = function (day) {
return Math.ceil(moment(day).dayOfYear() / 7);
};
但是,当我通过今天通过测试moment()
得到正确的结果时,为15。当我通过通过getWeek(moment())[0]
(即星期一)进行测试时,我得到14。
我怀疑这与时区或类似的时区有关,但是我对这些东西的工作原理一无所知。有人可以弄清楚吗?
您计算周数的算法不正确。(而且名称dayofweek
有点混乱)。
您需要使用
floor((dayOfYear(date) - dayOfWeek(date) + 10) / 7);
其中,dayOfYear
返回1-366并dayOfWeek
返回1-7(周一至周日)。
但是,由于您已经在使用moment.js,为什么不直接使用.isoWeek()
?
资料来源:ISO周日期(维基百科)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句