Moment.js格式化错误的日期

时间:2015-10-07 21:07:46

标签: javascript date momentjs

我对这里的情况感到非常困惑。特别是因为这已经工作了一段时间。我使用的是v2.10.6。 我传递的日期字符串var 12/02/2015将其转换为moment(eDate,"MM/DD/YYYY");的时刻对象 然后我将其传递给另一个函数,该函数将使用eDate.format("dddd, MMMM Do, YYYY")格式化它 输出Wednesday, November 18th, 2015。见下图。

moment.js formatting weirdness

有没有人对此有所了解?

2 个答案:

答案 0 :(得分:3)

我弄清楚发生了什么事。我最近添加了一段代码并没有放入OP中,因为我认为这是无关紧要的,我认为是错误的。所有的时刻都是可变的,这里有关于不可动摇的讨论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/来表明All moments are mutable. If you want a clone of a moment, you can do so explicitly or implicitly.

我的新专栏应该是

_SCHEDULEDPMTDATE = theDate.clone().subtract(cutoff,"days").format("MM/DD/YYYY");

答案 1 :(得分:0)

所以你已经发现了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>

在节点中:

$ npm install --save immoment

var immoment = require('immoment');

或:

var moment = require('immoment');

如果您不想更改已使用moment()来电的现有代码。

效果

Immment比Moment慢约3%,见基准:

大约四分之一千字节缩小并压缩。

(免责声明:我是Immoment的作者。)