gpt4 book ai didi

google-apps-script - 从工作表中获取时间时,Google 脚本会增加 +1 分钟

转载 作者:行者123 更新时间:2023-12-02 01:51:33 24 4
gpt4 key购买 nike

 var pickupTimeOld = wysylka.getRange("C5").getValue()
var pickupTime = Utilities.formatDate(pickupTimeOld, "GMT+1", 'HH:mm')

我在从 Google 表格中获取值时遇到问题,例如 9:50:00,它将时间更改为 09:26。我找不到它在哪里减去了 24 分钟,因为从代码来看一切都很好。谷歌表格的配置是否有可能导致这个问题?这个减去的原因可能是什么。

Google 表格中的格式化屏幕:

最佳答案

问题很可能是由于您的代码没有观察到您想要以 HH:mm 形式呈现的日期时间值的日期部分而引起的。

您的代码从电子表格中获取日期时间值,但根据屏幕截图,该日期时间值看起来只有时间部分。这意味着日期部分将默认为电子表格纪元,即 1899 年 12 月 30 日。时区偏移在 1899 年曾经非常奇怪,因此如果省略日期部分,可能会得到令人惊讶的结果。

即使在今天,并非所有时区都是整点 - 世界上加拿大、澳大利亚、新西兰、印度、伊朗、阿富汗和尼泊尔等地也存在 :30 和 :45 偏移。都柏林标准时间曾经是 UTC-00:25:21,孟买时间曾经是 UTC+04:51。马来亚和新加坡一直使用 UTC+07:20 作为夏令时,直到 1941 年。依此类推。

JavaScript 日期始终采用 UTC 格式,但当您呈现它们时,它会使用日期的时区和 zoneinfo确定日期对象在运行时环境中反射(reflect)的特定日期使用的偏移量。

在 Google Apps 脚本中,运行时环境的某些属性由脚本项目设置。脚本项目有自己的时区,与托管电子表格分开,并且这两个时区可能不同。这就是为什么在向用户呈现日期时间值时使用 Utilities.formatDate() 和电子表格的时区非常重要。

您的代码假定采用 GMT+1 时区,该时区可能与电子表格的时区不同。您的时区很可能是 EET 而不是 GMT+1。这两者不是一回事。目前最重要的区别是 EET 遵守夏令时 (EEST),而 GMT+1 则不遵守。 1899 年可能还存在其他差异,这可以解释您所描述的 24 分钟差异。

要获取电子表格中显示的时间值,您需要包含日期组件,并按照电子表格的时区格式化生成的日期时间,如下所示:

  const dateString = wysylka.getRange('B5').getDisplayValue().replace(/^(\d+)-(\d+)-(\d+)$/, '20$3-$2-$1 ');
const timeString = wysylka.getRange('C5').getDisplayValue();
const datetime = new Date(dateString + timeString);
const timezone = SpreadsheetApp.getActive().getSpreadsheetTimeZone();
const pickupTimeString = Utilities.formatDate(datetime, timezone, 'HH:mm');

您可能还需要检查电子表格的文件 > 设置 > 时区设置是否正确。请注意,更改时区将更改电子表格中日期时间值的显示方式,因此更改时区后可能需要更正它们。

关于google-apps-script - 从工作表中获取时间时,Google 脚本会增加 +1 分钟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70266327/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com