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

2024-03-18

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

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

Screen of formating in google sheets:


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

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

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

JavaScript 日期始终采用 UTC 格式,但是当您呈现它们时,它会使用日期的时区和zoneinfo https://en.wikipedia.org/wiki/Tz_database确定要使用的偏移量在特定日期日期对象反映的时区运行环境.

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

您的代码假设GMT+1时区,可能与电子表格的时区不同。您的时区很可能是EET而不是GMT+1。这两者不是一回事。目前最重要的区别是EET遵守夏令时(EEST) while 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');

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从工作表中获取时间时,Google 脚本会增加 +1 分钟 的相关文章

  • Google Sheets - 如何将过滤功能与过滤视图结合起来

    我一直在处理一个包含 100 多行的电子表格 并发现了一种巧妙的方法来合并 隐藏 复选框 该复选框将隐藏 C 列与框旁边指定的特定值 建筑类型 匹配的任何行 为此 我首先创建了一个如下函数 FILTER Data A1 OR Data C1
  • Google 脚本图表默认排除标题

    使用以下脚本 function chartCreation var ss SpreadsheetApp getActive var sheet ss getSheetByName Sheet1 var chart sheet newChar
  • 使用文件名将文件一个文件夹复制到 Google 云端硬盘中的另一个文件夹

    我的谷歌云端硬盘帐户中有两个文件夹 文件夹 1 和 文件夹 2 文件夹1 内有多个文件 假设有一个文件名Test txt我想复制Test txt使用 Driveapp 将文件保存到 文件夹 2 我找到了代码 但它仅适用于 文件唯一 ID 我
  • 未记录的 Sheet API 限制问题

    我已经看过人们遇到类似问题的帖子 但找不到明确的答案 我尝试使用以下代码行检索 264735 个插槽的二维数组 var optionalArguments majorDimension ROWS valueRenderOption FORM
  • 在 KRL 中如何获取当前的年、月、日?

    我正在开发一个应用程序 需要获取当前的年 月和日 有没有办法在规则的前块中获取此信息 我可以以字符串或数字或两者的形式获取此数据吗 目前有时间函数记录在http docs kynetx com docs Time http docs kyn
  • 将 Google Drive 目录中的所有文件恢复为旧版本

    最近 病毒加密了我的所有文件 不幸的是 谷歌备份和同步立即将文件的新版本 加密 上传到我的驱动器 我知道我可以将单个文件恢复到以前的版本 但我的驱动器上大约有 30 000 个文件 这意味着我无法手动恢复所有这些文件 我尝试使用 Apps
  • 如何在链接到表单的工作表中执行 Google 工作表脚本之前等待 Google 表单脚本完成执行

    我有两个脚本 一个链接到 Google 表单 另一个链接到 Google 表格 我需要确保 Google 表单脚本在执行链接到 Google 表单的工作表的 Google 工作表脚本主体之前完成执行 如何才能做到这一点 需要等待 Googl
  • 如何使用 Haskell 中的 thyme 库从 Int 值创建 UTCTime?

    我有年 月 日 小时和分钟值 所有这些都是类型Int 我怎样才能将它们转换为UTCTime or UniversalTime 需要导入以下内容 import Control Lens import Data Thyme Clock impo
  • 将“密码”类型添加到 Google Apps 脚本输入框

    是否可以将 密码 类型分配给 Google Apps 脚本输入框 以便不显示文本 以下工作正常 但输入字段是一个简单的文本框 并显示文本而不是 Browser inputBox Please enter your password 我有一个
  • 在网页中显示 Google 工作表单元格的内容

    我有一个包含 html 代码的单元格的 google 工作表 我想知道在网页中显示此 html 的最佳方式 我尝试过谷歌电子表格 API 和谷歌可视化 API 以下是如何使用 Javascript 图表 API 显示单个单元格中的信息 也许
  • 从纪元到相对日期的秒数

    我正在处理自纪元以来的日期 并且已经得到了 例如 date 6928727 56235 我想将其转换为另一种相对格式 以便我能够将其转换为与纪元相关的格式 使用 time gmtime date 它返回 year 1970 mon 3 da
  • Google Apps 脚本:从云端硬盘下载文件(同一用户)

    我正在尝试编写一个 Google Apps 脚本来下载特定云端硬盘文件夹中的所有文件 可能是 csv 文件 我找到了 getDownloadUrl 方法 但我不知道该做什么do用它 我目前正在尝试以下代码 其中files是文件夹中的文件列表
  • 从 Gmail 获取 pdf 附件作为文本

    我在网络和 Stack Overflow 上搜索但没有找到解决方案 我尝试做的事情如下 我通过邮件收到某些附件 我希望将其作为 纯 文本进行进一步处理 我的脚本如下所示 function MyFunction var threads Gma
  • Gmail 菜单按钮

    我希望编写一个 Google 脚本来存档所有早于某个日期的电子邮件 在该脚本中 我将添加一个自定义按钮 就像在 Google Sheets 中一样 以便我可以运行我的脚本 Google 脚本中是否存在向 Gmail 中的 UI 添加菜单 按
  • 使用 Javascript 和 Mongodb 对时间序列数据重新采样

    时间序列数据的数据集需要从具有不规则时间间隔的数据集转换为规则时间序列 可能使用插值和重采样 蟒蛇的pandas Dataframe resample http pandas pydata org pandas docs stable ge
  • 一起使用“过滤”和“排序”的 Google 表格

    这是我的第一个问题 我希望一切都好 我是使用谷歌表格的新手 但我正在慢慢进步 我正在尝试构建一个工作表 其中包含工作表 1 中的所有数据 在工作表 2 上 我想过滤工作表 2 中 D 列中标有数字 1 的所有数据 为此 我正在使用 FILT
  • Java 8,为什么不是 ZonedTime 类?

    我发现 Java 8 没有等效的分区日期时间 http docs oracle com javase 8 docs api java time ZonedDateTime html但只能与Time a 分区时间类或类似的东西 I know他
  • 根据单元格值隐藏列

    在我的谷歌电子表格 A 中 我使用 TRANSPOSE 和 IMPORTRANGE 公式的组合从日历电子表格 B 导入数据 以便填写事件的工作时间表 因为每个日期都有 3 个事件空位 但这些空位并不总是被填满 所以我收到了很多过时的列 表格
  • BigQuery REGEXP_MATCH 和重音:边界通配符失败?

    在 GAS 中 我可以正确地将重音符号与具有边界字符的正则表达式相匹配 例如 b b 仅当字符 是单独的单词时才匹配 这在 GAS 中有效 function test regExp var str la s ance est Paris v
  • Drive.Permissions.insert(值)-Drive API,您可以在“值”下使用数组吗?

    是否可以在此处使用 值 下的数组来阻止我创建组别名电子邮件地址 例如 userValues email protected cdn cgi l email protection email protected cdn cgi l email

随机推荐