Moment.js的简单功能会产生意外的(?)结果

关联

我编写了两个简单的函数来使用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。

JSFiddle

我怀疑这与时区或类似的时区有关,但是我对这些东西的工作原理一无所知。有人可以弄清楚吗?

Dancrumb

您计算周数的算法不正确。(而且名称dayofweek有点混乱)。

您需要使用

floor((dayOfYear(date) - dayOfWeek(date) + 10) / 7);

其中,dayOfYear返回1-366并dayOfWeek返回1-7(周一至周日)。

但是,由于您已经在使用moment.js,为什么不直接使用.isoWeek()

更新了JSFiddle

资料来源:ISO周日期(维基百科)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章