【发布时间】:2021-03-21 02:56:53
【问题描述】:
我有一个 Google App 脚本,它从电子表格中读取包含两个日期的一行。
这两个日期是用不同的时区读取的,我不明白为什么。
单元格内容为:
25/12/1941 16/02/2021
读取日期
var dataRng = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Elenco').getRange("G"+rowElenco+":AC"+rowElenco);
var dati = dataRng.getValues();
第一个日期读作
Thu Dec 25 1941 00:00:00 GMT+0200 (Central European Standard Time)
第二个日期是
Tue Feb 16 2021 00:00:00 GMT+0100 (Central European Standard Time)
为什么第一个日期是 GMT+"?
我(认为我)已经正确设置了电子表格和脚本时区:
Logger.log(Session.getScriptTimeZone());
Logger.log(SpreadsheetApp.getActiveSpreadsheet().getSpreadsheetTimeZone());
输出:
03:49:18 Informazioni Europe/Rome
03:49:18 Informazioni Europe/Rome
这会导致问题,因为我尝试格式化日期和
var dtNascita = Utilities.formatDate(dati[0][11], "GMT+1", "dd/MM/yy");
变成
dtNascita: "24/12/41"
我错过了什么?
【问题讨论】:
-
可能是历史性的时区偏移问题。大约在 1940 年代初期,许多欧洲国家改变了他们的偏移量,以有效地全年实行夏令时。例如。英国有双重夏令时(+2)。见Browsers, time zones, Chrome 67 Error (historic timezone changes)。
-
例如
new Date(Date.UTC(1941,0)).toLocaleString('en-GB',{timeZone:'Europe/Rome', timeZoneName:'short'})给出“01/01/1941, 2:00:00 GMT+2”,而 2021 年的同一日期给出“01/01/2021, 1:00:00 CET”(即 GMT +1)。
标签: javascript date google-apps-script google-sheets timezone