Javascript Moment.js格式不正确的日期

Javascript Moment.js格式不正确的日期,javascript,date,momentjs,Javascript,Date,Momentjs,我对这里发生的事感到很困惑。特别是因为这已经起作用一段时间了。我使用的是v2.10.6。 我正在传递一个日期字符串var12/02/2015将其转换为带有矩的矩对象(eDate,“MM/DD/YYYY”) 然后我将其传递给另一个函数,该函数将使用eDate.format(“dddd,MMMM-Do,YYYY”) 输出2015年11月18日星期三的。见下图 有人知道这件事吗?我知道发生了什么。有一段代码是我最近添加的,但没有放在OP中,因为我认为它无关紧要,所以我认为是错的。所有的时刻都是可变的

我对这里发生的事感到很困惑。特别是因为这已经起作用一段时间了。我使用的是v2.10.6。 我正在传递一个日期字符串var
12/02/2015
将其转换为带有
矩的矩对象(eDate,“MM/DD/YYYY”)
然后我将其传递给另一个函数,该函数将使用
eDate.format(“dddd,MMMM-Do,YYYY”)
输出2015年11月18日星期三的
。见下图


有人知道这件事吗?

我知道发生了什么。有一段代码是我最近添加的,但没有放在OP中,因为我认为它无关紧要,所以我认为是错的。所有的时刻都是可变的,这里有关于不变的讨论。我使用的代码与此类似

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
}
因此,您需要使用
时刻克隆
,该克隆表示
所有时刻都是可变的。如果您想克隆某个时刻,可以显式或隐式克隆。

我的新台词应该是


\u SCHEDULEDPMTDATE=theDate.clone().subtract(截止日期,“天”).format(“MM/DD/YYYY”)

所以你已经发现了力矩物体可变性的奇迹

下面是一个简单的示例,演示了此处发生的情况:

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日是的人之一,那么你可以用它来代替时刻。这就像是一个瞬间,但没有太多惊喜:

var january1 = immoment('2015-01-01');
var february1 = january1.add(1, 'months');
var march1 = january1.add(2, 'months');
var april1 = january1.add(3, 'months');
现在,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>
以及:

或:

如果不想更改已使用调用
moment()
的现有代码

演出 固定速度比瞬间慢约3%,见基准:

它大约有四分之一千字节被缩小和压缩


(免责声明:我是《献祭》的作者。)

我无法用你所给的复制这篇文章。请更新您的问题,以包含实际复制您正在显示的结果的代码。如果可以,请也创建一个JSFIDLE(或类似的)。我可能会帮助我们查看
eDate.format()
函数,因为它听起来像矩.js做得很好。哦,
eDate
就是字符串吗?或者您是否先创建一个名为
eDate
的力矩对象,然后再将其传递到
力矩(…)
?一个精确的重播会有帮助。此外,内部的
\u d
显示的是11月4日,而不是11月18日。您传入的内容也不一样(显示在
\u i
),因此您的使用有问题。很遗憾,我无法复制它@ZackTanner format()是一个内置函数moment.js@Matt是的,edate以字符串的形式开始它的生命,只传递给瞬间一次,第二次只是格式化输出。关于不同的日期,我知道,我只是不明白问题是什么。希望有人有一些见解,但却无法复制。也不完全确定
\u d
代表什么,以及它为什么说
无效日期
。是的,或者隐含地说是
时刻(日期)。减去….
两者都有效。另见:
$ npm install --save immoment
var immoment = require('immoment');
var moment = require('immoment');