var pickupTimeOld = wysylka.getRange("C5").getValue()
var pickupTime = Utilities.formatDate(pickupTimeOld, "GMT 1", 'HH:mm')
我在從谷歌表中獲取值時遇到一個問題,例如 9:50:00,它將時間更改為 09:26。我找不到它減去 24 分鐘的地方,因為從代碼中一切都很好。谷歌表格的配置有沒有可能導致這個問題?這個減法的原因是什么。
谷歌表格中的格式化螢屏: 
uj5u.com熱心網友回復:
嘗試這個:
var wysylka = SpreadsheetApp.getActiveSheet();
var pickupTimeOld = wysylka.getRange("C5").getDisplayValue();
var tz = Session.getTimeZone(); // or SpreadsheetApp.getActive().getSpreadsheetTimeZone();
var today = Utilities.formatDate(new Date(), tz, 'yyyy-MM-dd');
var pickupTime = Utilities.formatDate(new Date(today ' ' pickupTimeOld), tz, 'HH:mm');
可能在您的情況下,以today這種方式定義是有意義的:
var today = wysylka.getRange("B5").getDisplayValue()
uj5u.com熱心網友回復:
您的代碼從電子表格中獲取日期時間值。根據螢屏截圖,日期時間似乎只有時間組件。這意味著日期組件將默認為電子表格紀元,即 1899 年 12 月 30 日。
JavaScript 日期始終采用 UTC 格式,但是當您呈現它們時,它使用日期的時區和zoneinfo來確定日期物件在運行時環境的時區中反映的特定日期上使用的偏移量。在 Google Apps Script 中,腳本專案有自己的時區,可能與電子表格的時區不同。這就是為什么它是利用重要和電子表格的時區呈現datetime值時給用戶。Utilities.formatDate()
1899 年的偏移量曾經非常奇怪,因此如果您省略日期組件,您可能會得到令人驚訝的結果。您的代碼采用GMT 1時區,該時區可能與電子表格的時區不同。最有可能的是,您的時區是EEST而不是GMT 1。這兩者在今天已經不同了,它們在過去已經大不相同了。
要獲取電子表格中顯示的時間值,您需要包含日期組件,并在電子表格的時區中格式化生成的日期時間,如下所示:
const dateString = wysylka.getRange('B5').getDisplayValue().replace('^(\d )-(\d )-(\d )$', '20$3-$2-$1 ');
const timeString = wysylka.getRange('C5').getDisplayValue();
const timezone = SpreadsheetApp.getActive().getSpreadsheetTimeZone();
const datetime = new Date(dateString timeString);
const pickupTimeString = Utilities.formatDate(datetime, timezone, 'HH:mm');
您可能還想檢查電子表格的檔案 > 設定 > 時區是否設定正確。請注意,更改時區將更改電子表格中日期時間值的顯示方式,因此在更改時區后可能需要更正。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/376480.html
