在一年的最后一周添加1周的Moment.js错误

时间:2016-02-04 05:57:49

标签: javascript date momentjs

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

我试图使用momentjs。请查看以下示例,而不是给出2016年第1期'它给予' 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>
&#13;
&#13;
&#13;

1 个答案:

答案 0 :(得分:4)

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

编辑:这有点令人困惑,而且Moment.js确实令人困惑:

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

在解析中,YYYY指的是您计算周数的年份;不小心,那一周开始的日期是在前一年。在格式化中,YYYY指的是日期所在的年份。我想可以称之为错误;这当然是意料之外的。

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

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'));
<script src="https://cdn.jsdelivr.net/momentjs/2.10.6/moment-with-locales.min.js"></script>

另请注意,week()(和w说明符)与语言环境相关,并会在不同的地方为您提供不同的结果。