从工作表中获取时间时,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 Apps 脚本中创建插件

    我已经整理了一些我想在其他 Google 工作表中访问的代码 但是 由于它使用 SpreadsheetApp getUi 因此代码必须绑定到工作表 因此 我决定创建代码作为附加组件 不幸的是 除非我打开应用程序脚本页面 否则附加组件不会出现
  • Google Sheet - 使用 arrayformula 将两列转换为一列(超过 50,000 个字符)

    我正在使用 Google Sheets 并寻找一个数组公式 该数组公式能够将列表分为两列并将其交替排列在一列中 该表包含约 5 000 行 每行超过 35 个字符 我试过这个 transpose split join query trans
  • 在 PowerShell 中显示当前时间和时区

    我正在尝试使用时区显示系统上的当地时间 如何在任何系统上以最简单的方式显示这种格式的时间 时间 美国东部时间上午 8 00 34 我目前正在使用以下脚本 localtz System TimeZoneInfo Local Select Ob
  • AdminDirectory.Members.list 授权错误

    我正在尝试使用 Admin SDK 并尝试在 Google 电子表格中列出群组成员 这是我想出的代码 function recordGroupsMembers var ss SpreadsheetApp getActiveSpreadshe
  • 使用python删除未访问的文件

    My django app解析用户上传的一些文件 用户上传的文件可能会在服务器中保留很长时间 而没有被应用程序解析 如果很多用户上传大量文件 这可能会增加大小文件 我需要删除应用程序最近未解析的那些文件 比如not accessed for
  • 使用 Noda 时间将奥尔森时区 ID 转换为 Windows 标准格式

    Olson 和 Windows 时间 ID 之间的转换已在 SO 上出现过多次 很多人推荐乔恩 斯基特 Jon Skeet 的野田时间 http code google com p noda time 为了这个任务 虽然 Google 代码
  • 我正在尝试将变量从 Google 脚本传递到 HtmlOutputFromFile

    我正在尝试创建一个带有下拉列表的输入框 其中该列表基于从电子表格中提取的二维数组 到目前为止 我的研究告诉我 如果我将 HtmlService createHtmlOutputFromFile 存储在一个变量中 我就可以 设置该变量的属性
  • 乔达时间:将 UTC 转换为本地时间

    我想将 Joda Time UTC DateTime 对象转换为本地时间 这是一种看似有效的费力方法 但一定有更好的方法 这是没有周围声明的代码 在 Scala 中 val dtUTC new DateTime 2010 10 28T04
  • 如何下载以前保存的 Google Apps 脚本修订版本?

    我仍在尝试从中恢复不知何故 丢失 了 Google Apps 脚本 https stackoverflow com questions 33697789 当我创建脚本的副本以将代码分叉到另一个项目时 我的想法是尝试通过驱动器 API 下载
  • Java中如何获取时间分隔符?

    有没有办法在Java中获取时间分隔符 它是某个地方的常量还是吸气剂 也许有相当于 File separator 的东西 我的时间字符串由返回DateFormat getTimeInstance DateFormat SHORT locale
  • 如何使用脚本格式化 Google 文档中的文本

    我想编写一个脚本来查找所有特定单词并格式化它们的颜色 我尝试了以下操作 但似乎不起作用 function ChangeColor var body DocumentApp getActiveDocument getBody var mywo
  • 在应用程序脚本中将 .XLS 转换为 Google 表格的最有效方法是什么?

    我每周都会自动将 XLS 文件下载到 Google 云端硬盘 我想每周自动将最新下载的 XLS 文件转换为 Google 表格格式 因此转到特定的 Google 驱动器文件夹 查找最新或未转换的 XLS 文件 转换为 Google 表格格式
  • javascript 对象是否像 Ruby 一样“开放”?

    在 Ruby 中 我可以使用与声明自己的语法相同的语法来添加和修改任何类 对象或方法的功能 因为 Ruby 有 开放类 JavaScript 是这样的吗 举个例子 就我而言 我想更改 Google Apps 脚本处理 URL 对象的方式 以
  • 如何在Python中测量时间?

    我想启动我的程序 测量程序启动的时间 然后等待几秒钟 按下按钮 K RIGHT 并测量按下按钮的时间 我正在使用 Pygame 来注册 Keydown 但在我下面的代码中它没有注册我的 Keydown 我在这里做错了什么 start tim
  • Google App脚本:无法保留前导零,因为它被自动删除

    我是谷歌脚本的新手 我有一个像下面这样的场景 我有 Sheet1 其中包含 A 列和 B 列 通常我尝试将十进制值存储到其中 我的意思是A列中的整数部分和B列中的小数部分 例如 场景一 如果值为 23 75 则 Column A 应为 23
  • 自动从外部数据库加载 Google 电子表格数据

    我有一个共享的 Google 电子表格 工作表的某些列必须填充数据库服务器 PostgreSQL 中存在的数据 SQL 查询 此外 数据加载必须安排为自动完成 例如每天 1 点 最后 我需要在电子表格中进行一些调整 例如 加载后将日期时间放
  • 如何获取视频时长(以秒为单位)? [复制]

    这个问题在这里已经有答案了 如何获取以秒为单位的视频时长 我尝试过的 ffmpeg i file flv 2 gt 1 grep Duration Duration 00 39 43 08 start 0 040000 bitrate 38
  • setTimeout - 将变量作为时间传递

    我有一个 setTimeout 我希望能够使用变量作为计时器 var that this var time this spawnTime setTimeout function time that SpawnCounter time 这似乎
  • flutter 中 Future.delayed 与 Timer 有什么区别

    我想知道延迟代码执行的 Future delayed 和 Timer 方法之间的区别 两者似乎都做同样的事情 未来 延迟 Future delayed const Duration milliseconds 500 code VS Time
  • 通过 Google Apps 脚本发送电子邮件时出现问题

    我有时已经成功地通过 Google Apps 脚本发送电子邮件 但是 当我打开一个新的 Google Workspace 帐户并使用相同的代码将相同的内容发送到同一个接收者时 新帐户不起作用 我收到一条 消息已被阻止 的消息 电子邮件受保护

随机推荐