在Mozilla Firefox

时间:2015-09-14 21:06:08

标签: javascript momentjs

我目前正在使用moment.js库来实时向我的用户呈现日期,但经过今天的一些测试后,我注意到一些非常奇怪的事情,当在Firefox中向用户列出所有可能的日期时,moment.js无法在'2015-09-14'日期添加天数。 在搜索开发人员文档和互联网之后,我发现您必须通过传递日期的明确信息来传递ISO8601有效日期或构造,但结果仍然让我感到困惑。

以下是一些理解的代码:

工作案例(从当前时间创建一个moment()实例):

var printVar = moment();
var divInfo  = document.getElementById('calendars');
divInfo.innerHTML += "<ul>";

for(var i=0; i<40; i++){
    divInfo.innerHTML += "<li> " + printVar.format('DD/MM/YYYY') + " </li>";            
    printVar = moment(printVar).add(1, 'days');
}

divInfo.innerHTML += "</ul>";

我的结果:

  • 15/10/2015
  • 16/10/2015
  • 17/10/2015
  • 18/10/2015
  • 19/10/2015
  • 20/10/2015

奇怪的情况#1(使用编码'YYYY-MM-DD'的时间创建一个时刻()):

var printVar = moment('2015-09-14');

var divInfo  = document.getElementById('calendars');
divInfo.innerHTML += "<ul>";

for(var i=0; i<40; i++){
    divInfo.innerHTML += "<li> " + printVar.format('DD/MM/YYYY') + " </li>";            
    printVar = moment(printVar).add(1, 'days');
}

divInfo.innerHTML += "</ul>";

我的结果:

  • 15/10/2015
  • 16/10/2015
  • 17/10/2015
  • 17/10/2015
  • 18/10/2015
  • 19/10/2015

奇怪的情况#2(使用显式构造函数创建一个时刻(),如时刻([2015,8,14]))返回相同的结果:

  • 15/10/2015
  • 16/10/2015
  • 17/10/2015
  • 17/10/2015
  • 18/10/2015
  • 19/10/2015

Firefox版本:40.0.3

感谢所有帮助!

1 个答案:

答案 0 :(得分:0)

而不是

printVar = moment(printVar.format()).add(1, 'days');

只是做

printVar.add(1, 'days');

示例代码:

var printVar, divInfo, i;

printVar = moment();
divInfo  = document.getElementById('example-1');

divInfo.innerHTML += "<ul>";
for(i=0; i<10; i++){
    divInfo.innerHTML += "<li> " + printVar.format('DD/MM/YYYY') + " </li>";            
    printVar.add(1, 'days');
}
divInfo.innerHTML += "</ul>";


printVar = moment('2015-9-10');
divInfo  = document.getElementById('example-2');
divInfo.innerHTML += "<ul>";
for(i=0; i<10; i++){
    divInfo.innerHTML += "<li> " + printVar.format('DD/MM/YYYY') + " </li>";            
    printVar.add(1, 'days');
}

divInfo.innerHTML += "</ul>";


printVar = moment([2015, 8, 14]);
divInfo  = document.getElementById('example-3');
divInfo.innerHTML += "<ul>";

for(i=0; i<10; i++){
    divInfo.innerHTML += "<li> " + printVar.format('DD/MM/YYYY') + " </li>";            
    printVar.add(1, 'days');
}

divInfo.innerHTML += "</ul>";
div {
  margin-top: 20px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.10.6/moment.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.10.6/locale/af.js"></script>
<div id="example-1"></div>
<div id="example-2"></div>
<div id="example-3"></div>