我试图将所选事件插入数据库,我注意到我在日历中选择的时间与传递给AJAX的时间不同。 select
回调传递"开始"和"结束"与日历不同的时区的日期设置为。
我的日历设置:
$calendar.fullCalendar({
header: {
left: 'prev, today, next',
center: 'title',
right: 'agendaWeek, agendaDay'
},
timezone: 'Australia/Sydney',
defaultView: 'agendaWeek',
selectable: true,
selectHelper: true,
select: function(start, end) {
var startDate = new Date(start);
var endDate = new Date(end);
console.log(startDate);
console.log(startDate);
// ajax to insert event to DB
},
// other configurations
});
现在我的转储startDate
和endDate
看起来像是:
Mon Nov 14 2016 08:00:00 GMT+0100
日历设置为Australia/Sydney
,因此我在DB中保存错误的开始和结束日期。我觉得这是new Date()
生成给定时间戳的默认时区而不是日历设置的时间戳的问题。
有谁知道解决方案?
答案 0 :(得分:0)
开始日期和结束日期是moment个对象。它们不再位于当前时区,因此您必须克隆该对象,应用时区并添加偏移差异。
select: function(start, end) {
var startClone = start.clone();
startClone.tz('Australia/Sydney');
startClone.add(start.utcOffset() - startClone.utcOffset(), 'minutes');
console.log(startDate.format());
}
答案 1 :(得分:0)
问题在于使用new Date()
。
new Date()
在运行应用程序的浏览器时区上运行,不考虑您在应用程序中运行的时区或用户在配置文件中设置的时区(如果它'适用于您的情况)。
对于多时区应用,moment和moment-timezone是最佳选择