Google 日历 API 时区覆盖 javascript
Google Calendar API time zone override in javascript
我开发了一个网站,用作数字显示监视器幻灯片,将多个不同的 Google 日历组合到一个视图中。 http://www.anokaramsey.edu/events/displays
我的时区有问题。我们在中部时间。数字显示器有一个超级不稳定的配置,以便将这个网站显示为幻灯片。因此,它会定期从 EST 上的云浏览器抓取网站的屏幕截图,并将图像发送到我们的数字显示软件。 http://webshots.channelshd.com/remoteImages/anokaramsey-1.png
所以事件在显示器上呈现为 EST,但我需要它们保留在 CST 上。我正在使用 moment.js & moment-timezone.js.
这是我的 javascript 试图设置正确的时区,但没有成功。
...
var request = gapi.client.calendar.events.list({
'calendarId': cals[c],
'timeMin': (new Date()).toISOString(),
'lazyFetching': false,
'showDeleted': false,
'singleEvents': true,
'maxResults': 5,
'futureevents': true,
'orderBy': 'startTime'
});
request.execute(function (resp) {
for (i = 0; i < resp.items.length; i++) {
gevents.push(resp.items[i]); // keep. to monitor original gcal objects.
var start = resp.items[i].start.dateTime;
if (!start) {
start = resp.items[i].start.date;
};
var end = resp.items[i].end.dateTime;
if (!end) {
end = resp.items[i].end.date;
};
events.push({
id: resp.items[i].id,
title: resp.items[i].summary,
cal: resp.items[i].organizer.email,
start: start,
end: end,
url: resp.items[i].htmlLink,
location: resp.items[i].location,
descr: resp.items[i].description
});
}
});
}
}
...
function display(events) {
if (events.length > 0) {
events.sort(function (a, b) {
// super simple sort
return new Date(a.start) - new Date(b.start);
});
for (i = 0; i < events.length; i++) {
var event = events[i];
var when = event.start;
var until = event.end;
var header = moment(when).format("MMM D, YYYY");
if (header != oldHeader) {
var id = moment(when);
//appendPre('<h3>'+header+'</h3>');
appendPre('<ul id="' + id + '">');
}
var startTime = moment(when).tz("America/Chicago").format("h:mma");
var endTime = moment(until).tz("America/Chicago").format("h:mma");
...
您应该能够从顶部看到所有交互文件 URL,但如果更多代码有帮助,请告诉我。
如果您在网站上打开开发人员控制台,那里的错误消息会解释问题:
您正在加载 moment.js
和 moment-timezone.js
,但您尚未填充任何时区数据。
人们通常希望涵盖世界上所有时区,因此会使用 moment-timezone-all-years.js
或 moment-timezone-2010-2020.js
,具体取决于您关心的数据范围。您将加载这些 而不是 moment-timezone.js
。
但是,在您的情况下,我认为您只需要单个时区的相对最新数据,因此我会继续加载 moment-timezone.js
并在您自己的脚本中手动填充该单个时区:
moment.tz.add("America/Chicago|CST CDT|60 50|01010101010101010101010|1BQU0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0");
您可以read more about data loading in the documentation, and find other specific time zone data by examining the moment-timezone-with-data-2010-2020.js归档。
我开发了一个网站,用作数字显示监视器幻灯片,将多个不同的 Google 日历组合到一个视图中。 http://www.anokaramsey.edu/events/displays
我的时区有问题。我们在中部时间。数字显示器有一个超级不稳定的配置,以便将这个网站显示为幻灯片。因此,它会定期从 EST 上的云浏览器抓取网站的屏幕截图,并将图像发送到我们的数字显示软件。 http://webshots.channelshd.com/remoteImages/anokaramsey-1.png
所以事件在显示器上呈现为 EST,但我需要它们保留在 CST 上。我正在使用 moment.js & moment-timezone.js.
这是我的 javascript 试图设置正确的时区,但没有成功。
...
var request = gapi.client.calendar.events.list({
'calendarId': cals[c],
'timeMin': (new Date()).toISOString(),
'lazyFetching': false,
'showDeleted': false,
'singleEvents': true,
'maxResults': 5,
'futureevents': true,
'orderBy': 'startTime'
});
request.execute(function (resp) {
for (i = 0; i < resp.items.length; i++) {
gevents.push(resp.items[i]); // keep. to monitor original gcal objects.
var start = resp.items[i].start.dateTime;
if (!start) {
start = resp.items[i].start.date;
};
var end = resp.items[i].end.dateTime;
if (!end) {
end = resp.items[i].end.date;
};
events.push({
id: resp.items[i].id,
title: resp.items[i].summary,
cal: resp.items[i].organizer.email,
start: start,
end: end,
url: resp.items[i].htmlLink,
location: resp.items[i].location,
descr: resp.items[i].description
});
}
});
}
}
...
function display(events) {
if (events.length > 0) {
events.sort(function (a, b) {
// super simple sort
return new Date(a.start) - new Date(b.start);
});
for (i = 0; i < events.length; i++) {
var event = events[i];
var when = event.start;
var until = event.end;
var header = moment(when).format("MMM D, YYYY");
if (header != oldHeader) {
var id = moment(when);
//appendPre('<h3>'+header+'</h3>');
appendPre('<ul id="' + id + '">');
}
var startTime = moment(when).tz("America/Chicago").format("h:mma");
var endTime = moment(until).tz("America/Chicago").format("h:mma");
...
您应该能够从顶部看到所有交互文件 URL,但如果更多代码有帮助,请告诉我。
如果您在网站上打开开发人员控制台,那里的错误消息会解释问题:
您正在加载 moment.js
和 moment-timezone.js
,但您尚未填充任何时区数据。
人们通常希望涵盖世界上所有时区,因此会使用 moment-timezone-all-years.js
或 moment-timezone-2010-2020.js
,具体取决于您关心的数据范围。您将加载这些 而不是 moment-timezone.js
。
但是,在您的情况下,我认为您只需要单个时区的相对最新数据,因此我会继续加载 moment-timezone.js
并在您自己的脚本中手动填充该单个时区:
moment.tz.add("America/Chicago|CST CDT|60 50|01010101010101010101010|1BQU0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0");
您可以read more about data loading in the documentation, and find other specific time zone data by examining the moment-timezone-with-data-2010-2020.js归档。