1

我试图将选定的事件插入数据库,我注意到我在日历中选择的时间与传递给 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日历设置的,所以我在数据库中保存了错误的开始和结束日期。我有点觉得这是new Date()生成具有默认时区的给定时间戳而不是日历设置的时间戳的问题。

有人知道解决方案吗?

4

2 回答 2

0

开始日期和结束日期是时刻对象。但是它们不再处于当前时区,因此您必须克隆对象,应用时区并添加偏移量差异。

select: function(start, end) {
    var startClone = start.clone();
    startClone.tz('Australia/Sydney');
    startClone.add(start.utcOffset() - startClone.utcOffset(), 'minutes');
    console.log(startDate.format());
}
于 2016-11-18T16:32:29.583 回答
0

问题在于使用new Date().

new Date(),默认情况下,在运行应用程序的浏览器时区上运行,而不考虑您在应用程序中运行的时区或用户在配置文件中设置的时区(如果适用于您的情况)。

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

于 2016-11-21T15:02:39.983 回答