全日历与 UTC 和本地日期的混淆

2024-05-12

我确实让 fullcalendar 正常初始化。所以它代表当前日期。 (午夜->午夜,1 天,1 小时时段)

我从其他一些数据源获取带有时间戳的数据。格式为“YYYY-MM-DD HH:mm”(作为字符串传输,无时区信息)

因此,我将该字符串转换为 moment 对象,并针对 fullcalendar.start 和 .end 进行测试,看看它是否在其中。

moment("2016-04-07 00:00") == $('#calendar').fullCalendar('getView').end

这导致false虽然下面的命令

$('#calendar').fullCalendar('getView').end.format("YYYY-MM-DD HH:mm")

returns

"2016-04-07 00:00"

我也尝试与 diff 进行比较

moment("2016-04-07 00:00").diff( $('#calendar').fullCalendar('getView').end,"minutes")

返回

120

对 Chrome 开发工具中的 calendars.end 对象的一些研究表明,它在内部表示为

2016-04-07 02:00 GMT+0200

这对我来说看起来很奇怪。我的时区比 GMT 早 2 小时。所以它应该正确地说 2016-04-07 00:00 GMT+0200,不是吗? 这也解释了为什么上面的 diff 测试结果是 120 分钟。

有人可以帮忙吗?我不明白转换问题从何而来。我仅使用没有时区信息的日期。如上所述,fullcalendar 初始化时没有 gotodate 信息,并显示从 00:00 到 00:00 的时间栏。那么为什么会有2个小时的差异呢?


多谢。我现在确实更好地理解了事情。 我尝试比较的一些日期是“现在”。我得到了“现在”

var n = moment()

结果是一个日期时间,包括我的时区。

例如。 moment().format() 导致 '2016-04-07 00:00 GMT+0200',我现在明白这是如何出错的,除了与完整的 calendar.end 进行比较之外true但它是false因为“2016-04-07 00:00 GMT+0200”在 UTC 时是“2016-04-06 22:00”。

As

moment.utc() 

不起作用,我知道最终使用了

moment.utc(moment().format('YYYY-MM-DD HH:mm'))

现在这似乎有效,因为这对待我的当地时间,因为它将是 UTC 的“数字相同时间”..从而与 fullcalendar 在内部处理时间的方式相匹配(模糊区域时刻)。

Thanks

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

全日历与 UTC 和本地日期的混淆 的相关文章