Javascript Moment.js格式不正确的日期
我对这里发生的事感到很困惑。特别是因为这已经起作用一段时间了。我使用的是v2.10.6。 我正在传递一个日期字符串varJavascript 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中,因为我认为它无关紧要,所以我认为是错的。所有的时刻都是可变的
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');