我写了两个简单的函数来玩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.
我怀疑这与时区或类似事件有关,但我对这些事情的运作方式几乎一无所知。有人能搞清楚吗?
答案 0 :(得分:1)
您计算周数的算法不正确。 (名称dayofweek
也有点混乱)。
您需要使用
floor((dayOfYear(date) - dayOfWeek(date) + 10) / 7);
dayOfYear
返回1-366,dayOfWeek
返回1-7(周一至周日)。
但是,由于您已经在使用moment.js,为什么不使用.isoWeek()
?