FullCalendar JS - 选择回调在错误的时区传递开始和结束日期

时间:2016-11-18 16:21:14

标签: javascript fullcalendar fullcalendar-scheduler

我试图将所选事件插入数据库,我注意到我在日历中选择的时间与传递给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
});

现在我的转储startDateendDate看起来像是:

Mon Nov 14 2016 08:00:00 GMT+0100

日历设置为Australia/Sydney,因此我在DB中保存错误的开始和结束日期。我觉得这是new Date()生成给定时间戳的默认时区而不是日历设置的时间戳的问题。

有谁知道解决方案?

2 个答案:

答案 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()在运行应用程序的浏览器时区上运行,不考虑您在应用程序中运行的时区或用户在配置文件中设置的时区(如果它'适用于您的情况)。

对于多时区应用,momentmoment-timezone是最佳选择