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

Javascript FullCalendar JS-选择回调传递错误时区的开始和结束日期,javascript,fullcalendar,fullcalendar-scheduler,Javascript,Fullcalendar,Fullcalendar Scheduler,我试图将所选事件插入DB,我注意到我在日历中选择的时间与传递给AJAX的时间不同选择回调传递的“开始”和“结束”日期与日历设置的时区不同 我的日历设置: $calendar.fullCalendar({ header: { left: 'prev, today, next', center: 'title', right: 'agendaWeek, agendaDay' }, timezone: 'Australia/Syd

我试图将所选事件插入DB,我注意到我在日历中选择的时间与传递给AJAX的时间不同<代码>选择回调传递的“开始”和“结束”日期与日历设置的时区不同

我的日历设置:

$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
日历设置的不是澳大利亚/悉尼,所以我在DB中保存了错误的开始和结束日期。我有点觉得这是
newdate()
的问题,它使用默认时区生成给定的时间戳,而不是日历设置的时间戳

有人知道解决办法吗

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

select: function(start, end) {
    var startClone = start.clone();
    startClone.tz('Australia/Sydney');
    startClone.add(start.utcOffset() - startClone.utcOffset(), 'minutes');
    console.log(startDate.format());
}
开始日期和结束日期是对象。但它们不再位于当前时区,因此必须克隆对象,应用时区并添加偏移差

select: function(start, end) {
    var startClone = start.clone();
    startClone.tz('Australia/Sydney');
    startClone.add(start.utcOffset() - startClone.utcOffset(), 'minutes');
    console.log(startDate.format());
}

问题在于使用
新日期()

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


对于多时区应用程序,和是最佳选择

问题在于使用
新日期()

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


对于多时区应用程序,and是最佳选择

您可能必须使用UTC来调整任何不同的区域:-您还可以查看您可能必须使用UTC来调整任何不同的区域:-您还可以查看我尝试运行此命令的情况:
moment(start).tz('Australia/Sydney')。format()
所以现在如果我选择从7:00到8:00,不是时刻将时区分配给这个小时,而是将7:00转换为18:00的时区。7:00我所需要的就是澳大利亚/悉尼时间区我在这里找到了如何转换时间:如果你更新你的答案,我会标记为正确,因为你给了我正确的时间路径。我已经更新了答案来计算偏移量。很高兴你能找到答案。我试着运行:
time(start).tz('Australia/Sydney').format()
,所以现在如果我选择7:00到8:00,不是时刻将时区指定给这个小时,而是将7:00转换为18:00的时区。7:00我所需要的就是澳大利亚/悉尼时间区我在这里找到了如何转换时间:如果你更新你的答案,我会标记为正确,因为你给了我正确的时间路径。我已经更新了答案来计算偏移量。很高兴你能弄明白。