У меня проблема с обработкой дат JSON из XML-файла календаря Google. Я извлек .startTime и .endTime и использую jQuery для форматирования этих дат (+ все даты между ними) как ГГГГ-ММ-ДД. Затем я использую отформатированные даты, чтобы добавить цвет фона в ячейки таблицы с соответствующими уникальными идентификаторами (#ГГГГ-ММ-ДД) в моем собственном календаре. Работает нормально, но где-то по пути даты становятся несовпадающими. Я следую процессу:
- Введите событие в Календаре Google. В качестве тестового события я использовал 25–27 марта 2014 г. (событие на весь день отмечено флажком).
- Извлеченные данные XML JSON:
"gd$when": [{"endTime": "2014-03-28", "startTime": "2014-03-25"
(Итак, я уже запутался, потому что в JSON добавлен дополнительный день к дате окончания моего мероприятия - почему?)
Использовал jQuery ниже, чтобы назначить отформатированные даты идентификатору моего собственного Cal. (Спасибо @Ezequiel, который помог мне зайти так далеко - я не силен в jQuery).
function GCalEvents() { var calendar_json_url = "https://www.google.com/calendar/feeds/my_email%40googlemail.com/public/full?orderby=starttime&sortorder=ascending&max-results=60&futureevents=true&alt=json" // Get list of upcoming events formatted in JSON jQuery.getJSON(calendar_json_url, function(data){ // Parse and render each event jQuery.each(data.feed.entry, function(i, item){ var formatInt = function (i) { if (i < 10) return "0" + i; return i; }; var format = function (d) { var date = d.getDate(); var month = d.getMonth() + 1; var year = d.getFullYear(); return year + "-" + formatInt(month) + "-" + formatInt(date); }; var getDates = function (start, theend) { var current = new Date(start); var finish = new Date(theend); var result = []; do { current.setDate(current.getDate() + 1); result.push(format(current)); } while (current < finish); return result; }; // Apply background to dates. var start = item.gd$when[0].startTime; var theend = item.gd$when[0].endTime; var dates = getDates(start, theend).map(function toId(date) { return "#" + date }).join(","); jQuery(dates).removeClass('date-cell').addClass('date-selected'); }); }); }
Проверьте календарь, и он покрасил фоны 26, 27, 28 марта, так что конечный эффект заключается в том, что он сдвинул все мое исходное событие GCal на один день вперед, а по отношению к JSON это имеет правильную дату окончания, но неправильную дату начала! Очевидно, я просто хочу, чтобы отображалась правильная дата GCal.
Что я пробовал:
var date = d.getDate() -1 ;
- But this causes problems with the final day of the month.- There are no other jQuery functions interfering.
- Идентификаторы ячеек таблицы для моего собственного календаря генерируются правильно.
Это связано с часовым поясом?
Я был бы признателен за любую помощь, которую кто-либо может дать.