Len*_*Z71 3 google-apps-script
我想使用日历时区来设置日期对象的时区。我正在寻找合适的技术。我们在全国各地设有多个基地,每个基地都有自己的日记和日常活动日历。我们有多个发布到日历的脚本。我想使用日历的时区来设置日期对象时区,因为用户旅行到不同的基地,并且他们的计算机可能未设置为正确的时区。我们希望避免错误的时间设置。
脚本的时区是否应该设置为 UTC?
这就是我目前所处的位置:
function submitUiTest(e) {
var app = UiApp.getActiveApplication();
var cal = CalendarApp.getCalendarById('calendarId');
var timeZone = cal.getTimeZone();
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName('Sheet1');
var startTime = e.parameter.startDate
startTime.setHours(e.parameter.startHour, e.parameter.startMin, 0)
startTime = formatTime(startTime, timeZone);
Logger.log(startTime)
var endTime = e.parameter.endDate
endTime.setHours(e.parameter.endHour, e.parameter.endMin, 0);
endTime = formatTime(endTime, timeZone);
Logger.log(endTime)
cal.createEvent('TimeZone Test', new Date(startTime), new Date(endTime));
ss.appendRow([startTime, endTime]);
return app;
}
function formatTime(time, timeZone){
return Utilities.formatDate(time, (timeZone-time.getTimezoneOffset()), 'M/d/yyyy HH:mm');
}
Run Code Online (Sandbox Code Playgroud)编辑:目前有 3 个日历,它们不是用户日历,只是为各个航空站创建的单独日历。每个航空站都位于不同的时区。当工作人员在这些站点工作时,他们会将日常活动发布到日历中,并且我们还有几个 Ui 脚本可以发布到相同的日历中。飞行日志。当日历条目发布到任何日历时,时间仅与脚本上设置的时区相关,而不与日历上的时区相关。创建日期或时间戳对象时,如何使用日历本身设置的时区。
记录不同时区日期的脚本的最佳实践是什么?将脚本时区设置为 UTC 并进行转换?你用什么来获取用户的时区,或者在这种情况下,我也不关心用户的时区设置了什么,我需要使用日历的时区。
这是答案的修改版本,没有 UI 内容:
function gasTimezoneOffset(date, hour){
var cal,calTimeZone,calTz,date,dateString,scriptTimeZone,sessionTz;
var testMonth = "March",
testDayOfMnth = "26",
testYr = "2016",
hour = "10:00",
timeZoneDiff = 0;
Logger.log("Script Time Zone: " + Session.getScriptTimeZone());
dateString = testMonth + " " + testDayOfMnth + ", " + testYr;
Logger.log("dateString: " + dateString);
date = new Date(dateString);
cal = CalendarApp.getDefaultCalendar();
calTimeZone = cal.getTimeZone();
calTimeZone = Utilities.formatDate(date, calTimeZone, 'Z');
scriptTimeZone = Utilities.formatDate(date, Session.getTimeZone(), 'Z');
calTz = Number(calTimeZone.slice(0,3));
sessionTz = Number(scriptTimeZone.slice(0,3));
//If both time zones are the same sign, get the difference between the
//two. E.g. -4 and -2. Difference is 2
//if each time zone is a different sign, add the absolute values together.
//-4 and +1 should be 5
if (calTz < 0 && sessionTz > 0 || calTz > 0 && sessionTz < 0){
timeZoneDiff = Math.abs(Math.abs(calTz) + Math.abs(sessionTz));
} else {
timeZoneDiff = Math.abs(Math.abs(calTz) - Math.abs(sessionTz));
};
hour = Number(hour.slice(0,2));
return hour + timeZoneDiff;
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4676 次 |
| 最近记录: |