我正在创建一个用于管理班级的学校项目,时区存在问题,DST是我的代码:
javascript
dejt = new Date(thisYear, 8, day, beginTime, endTime, 0, 0);
dejt.toLocaleString("en-US", {timezone: "Europe/Belgrade"});
然后我通过一些函数,直到:
javascript
function makeCalendar(name, begin, end, calendar) {
var eventSeries = CalendarApp.getCalendarById(calendar).createEventSeries(
name,
begin,
end,
CalendarApp.newRecurrence()
.addWeeklyRule().interval(2).until(endDate)
);
}
效果很好,直到10月29日一切都移动了一个小时。
我如何管理DST?
编辑:
在将脚本设置为GMT(无夏令时)之后,事情变得更加一致,每个日期均为+00:00
Logs:
[19-02-12 11:30:15:809 CET] Sun Feb 17 00:00:00 GMT+00:00 2019
[19-02-12 11:30:15:810 CET] Mon Feb 18 00:00:00 GMT+00:00 2019
[19-02-12 11:30:24:051 CET] Mon Sep 03 14:00:00 GMT+00:00 2018
[19-02-12 11:30:24:503 CET] Mon Sep 03 14:50:00 GMT+00:00 2018
现在唯一的问题是,重复发生的事件只会改变应该节省夏令时的时间(不是新的错误,以前是这样的。)
编辑:
我发现的新东西: 如果您手动编辑事件,则有一个时区框。我的脚本使它成为UTC,但我可以手动编辑或删除它。这里的问题是我需要手动执行。
我还在Google文档中找到了.setTimeZone(string): here和here
现在的问题是,无论我尝试了什么事件,都无法使它正常工作,而且就像UTC一样
答案 0 :(得分:0)
好了,在对此进行了深入研究之后,似乎有了解决之道。
除非您要传递给脚本的Date
对象中指定了该脚本,否则Google日历会查看该脚本的时区。在您的情况下,它不是(toLocaleString
不会修改原始对象,如果这样做,将字符串传递到createEventSeries
时会出错。)无论如何,您脚本的时区似乎是贝尔格莱德,并且存在夏令时,时间更改等。
最后,可能的解决方案。我不知道日历服务是否允许不考虑DST,因此尝试解决此问题:
// function to convert date to UTC so that it retains original hours value
function convertDateToUTC(date, timezoneOffset) {
return new Date(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate(), date.getUTCHours() + timezoneOffset, date.getUTCMinutes(), date.getUTCSeconds());
}
// 1 is the timezone offset from GMT
makeCalendar('test event', convertDateToUTC(beginDate, 1), convertDateToUTC(endDate, 1), calendar.getId());
功能convertDateToUTC
基于this answer。
使用此方法,我得到了(最初时间是早上7点):