moment.format()第二天返回

时间:2017-02-08 01:31:24

标签: fullcalendar momentjs

所以我使用Fullcalendar并且在dayClick上我试图找到与点击日相匹配的事件。

 var events = $calendar.fullCalendar('clientEvents');
    if(events.length > 0) {
       for (var i = 0; i < events.length; i++) {
          if (date.format('YYYY-MM-DD') == events[i].start.format('YYYY-MM-DD')) {

    ...

现在

date.format('YYYY-MM-DD') 

返回我点击的那一天,但是当for循环到达那天的事件时

events[i].start.format('YYYY-MM-DD')

第二天返回。这似乎受到UTC的影响,但这适用于所有带事件的日子。不只是今天。我尝试过不同的格式,但仍然一样。这是我注意到的事情:

n
_ambigTime:false
_ambigZone:true
_d:Thu Feb 09 2017 08:00:00 GMT-0500 (EST)
_f:"YYYY-MM-DD HH:mm:ss"
_fullCalendar:true
_i:"2017-02-08 13:00:00"
_isAMomentObject:true
_isUTC:true
_isValid:true
_locale:f

请注意_d和_i是不同的。 _i实际上是正确的日期/时间。那我怎么能参考呢?

1 个答案:

答案 0 :(得分:1)

_开头的所有时刻属性(如_d_i)仅供内部使用,不应使用。

如果要检查两个时刻对象是否代表同一天,可以使用isSame传递第二个参数来限制粒度,而不是比较格式化的字符串。在你的情况下:

date.isSame(events[i].start, 'day')

问题是您的某些对象是以UTC模式(_isUTC: true)创建的,因此它们将使用UTC时间(在某些情况下是前一天)而不是本地时间显示。

有关UTC模式here的更多信息:

  

默认情况下,时刻会以当地时间进行分析和显示。

     

如果您想以UTC格式解析或显示片刻,可以使用moment.utc()代替片刻()。

     

这为我们带来了Moment.js的一个有趣特征。 UTC模式。

     

在UTC模式下,所有显示方法都将以UTC时间而不是本地时间显示。