我弄清楚了发生了什么。有一段代码是我最近添加的,没有放在原始帖子中,因为我认为它与问题无关,但我错了。所有时刻都是可变的,这里有关于不可变性的讨论 https://github.com/moment/moment/issues/1754。我正在使用的代码类似于这样:
var theDate = moment(edate,"MM/DD/YYYY"); // edate=12/02/2015 being passed in
_SCHEDULEDPMTDATE = theDate.subtract(cutoff,"days").format("MM/DD/YYYY");
// cutoff = 14; i assumed theDate would not be affected.
showNewEventForm(theDate,eventid);
function showNewEventForm(eDate,eid){
$("#ScheduleDate").text(eDate.format("dddd, MMMM Do, YYYY"));
// eDate has mutated to eDate-14days
}
Moment Clone
http://momentjs.com/docs/#/parsing/moment-clone/,该页面说明了 所有的时间点都是可变的。如果您想要一个时间点的克隆,可以明确或隐式地执行此操作。
您新的一行应该是
_SCHEDULEDPMTDATE = theDate.clone().subtract(cutoff,"days").format("MM/DD/YYYY");
moment(theDate).subtract....
两种方式都可以。另请参见:https://dev59.com/82Qm5IYBdhLWcg3wyhfk#17334415 - Matt Johnson-Pint所以你已经发现了 Moment 对象的可变性的奇妙之处。
这里有一个更简单的例子,演示了这里正在发生的事情:
var january1 = moment('2015-01-01');
var february1 = january1.add(1, 'months');
var march1 = january1.add(2, 'months');
var april1 = january1.add(3, 'months');
当然,april1
现在指向7月1日。为什么不呢。
如果你是那些期望它是4月1日的人之一,那么你可以使用Immoment代替Moment。它就像Moment一样,但是少了一些惊喜:
var january1 = immoment('2015-01-01');
var february1 = january1.add(1, 'months');
var march1 = january1.add(2, 'months');
var april1 = january1.add(3, 'months');
现在april1
指向4月1日,这可能会让一些人感到略微惊讶。
在浏览器中,您可以像这样使用它:
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.10.6/moment.min.js"></script>
<script src="https://cdn.rawgit.com/rsp/node-immoment/v0.0.12/immoment.min.js"></script>
在Node中:
$ npm install --save immoment
并且:
var immoment = require('immoment');
或者:
var moment = require('immoment');
如果您不想更改已经使用 moment()
调用的现有代码。
Immoment 比 Moment 稍慢约 3%,请参阅基准测试:
这个文件经过压缩和gzip处理后,大小只有四分之一千字节。
(免责声明:我是Immoment的作者。)
eDate.format()
函数会对我们有所帮助,因为听起来Moment.js已经很好地完成了它的工作。 - Zack TannereDate
是一个字符串吗?还是你首先创建了一个名为eDate
的 moment 对象然后再将其传递到moment(...)
中?提供一个精确的复现代码会有所帮助。 - Matt Johnson-Pint_d
显示的是11月4日,而不是11月18日。同时,你传入的值也不是显示在_i
中的,因此你的使用方法可能存在问题。 - Matt Johnson-Pint_
的内部值。我只是看它们,因为那是你所展示的全部内容。通常情况下,你不应该使用它们。 - Matt Johnson-Pint