【问题标题】:Moment.js bug while adding 1 week at last week of year在一年的最后一周添加 1 周时出现 Moment.js 错误
【发布时间】:2016-02-04 05:57:48
【问题描述】:

我正在尝试添加一周,无论用户选择了周和年,我需要以“周年”格式输出。

我尝试使用momentjs。检查下面的示例,而不是给出 '1 2016' 它给出 '1 2015'。

var test = moment('52 2015','w YYYY').add(1,'w').format('w YYYY');
$('body').html(test);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script src='http://momentjs.com/downloads/moment.min.js'></script>

【问题讨论】:

    标签: javascript date momentjs


    【解决方案1】:

    2015 年第 52 周从 2015 年 12 月 20 日开始;一周后,是2015-12-27。 Moment.js 中没有错误 - 并非所有年份都有 52 周。 (请注意,2015 年的第一周从 2014 年开始。)

    编辑:这有点令人困惑,实际上 Moment.js 本身也令人困惑:

    moment('1 2015','w YYYY').format('w YYYY')
    // => 1 2014
    

    在解析中,YYYY 指的是你计算周数的年份;意外地,该周的开始日期位于前一年。在格式化中,YYYY 指的是日期所在的年份。我想有人可以称之为错误;这当然是出乎意料的。

    EDIT2:怎么做?你自己做。如果月份不是一月,而周是一年中的第一周,那就有点奇怪了;所以增加年份。

    function weekAndYear(date) {
      var week = date.week();
      var year = date.year();
      if (date.month() && week == 1) {
        year++;
      }
      return '' + week + ' ' + year;
    }
    document.body.textContent = weekAndYear(moment('52 2015','w YYYY').add(1,'w'));
    &lt;script src="https://cdn.jsdelivr.net/momentjs/2.10.6/moment-with-locales.min.js"&gt;&lt;/script&gt;

    还要注意week()(和w 说明符)依赖于语言环境,并且会在不同的地方为您提供不同的结果。

    【讨论】:

    • 那么如何获得下周epi呢?所以如果用户选择 '52 2015' 那么如何获得 '1 2016' ?
    • 刚刚完成了那部分,现在看到你的答案。 :) 我做过同样的事情。无论如何谢谢:)
    猜你喜欢
    • 2021-08-04
    • 2012-01-18
    • 2021-10-07
    • 2023-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多