所以我使用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实际上是正确的日期/时间。那我怎么能参考呢?
答案 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时间而不是本地时间显示。