2016-11-18 6 views
1

Я пытался вставить выбранное событие в БД, и я заметил, что время, которое я выбираю в календаре, отличается от того, которое было передано в AJAX. select обратный вызов передает даты «старт» и «конец» с разными часовыми поясами, чем установлен календарь.FullCalendar JS - выбор обратного вызова проходит даты начала и окончания в неправильном часовом поясе

Мои настройки календаря:

$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 что календарь установлен, поэтому я спасаю неправильно даты начала и окончания в БД. Я чувствую, что это проблема с new Date(), которая генерирует заданную метку времени с часовым поясом по умолчанию, а не тот, для которого установлен календарь.

Кто-нибудь знает решение?

+0

Вы, возможно, придется использовать UTC, чтобы настроить для любого другого региона: http://www.techrepublic.com/article/convert-the-local -time-to-another-time-zone-with-this-javascript/- вы также можете посмотреть http://momentjs.com/timezone/ – webdad3

ответ

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()); 
} 
+0

Я попытался запустить это: 'moment (start) .tz (' Австралия/Сидней '). Format() 'поэтому теперь, если я выберу с 7:00 до 8:00, это не тот момент, который назначает часовой пояс на этот час, а вместо этого преобразует 7:00 с этим часовым поясом, который составляет 18:00. Все, что мне нужно, чтобы 7:00 было «часовым поясом Австралии/Сиднея» –

+0

Я нашел, как сменить время здесь: http://stackoverflow.com/questions/28593304/same-date-in-different-time-zone/28615654# 28615654, если вы обновите свой ответ, я буду отмечать как правильное, так как вы дали мне путь к работе с моментом. –

+0

Я обновил ответ, чтобы рассчитать смещение. Рад, что ты смог понять это. – fanfavorite

0

Проблема с использованием new Date().

new Date(), по умолчанию работает в часовом поясе браузера, на котором выполняется приложение, БЕЗ рассмотрения часовой пояс, который вы используете в приложении, или часовой пояс, который пользователь установил в профиле (если это применимо в вашем случае).

Для многих часовых поясов приложений, moment и moment-timezone являются лучшим выбором