gpt4 book ai didi

javascript - 如何使用负时间戳进行数学运算?

转载 作者:行者123 更新时间:2023-12-03 09:29:55 25 4
gpt4 key购买 nike

我正在使用 Google 电子表格,并且有一个采用以下格式的工作表:

Start | End     | Partial result | Expected | Total
08:00 | 12:00 | 04:00 | 05:00 | -01:00
14:00 | 18:00 | 04:00 | 05:00 | -01:00
----------------------------------------------------
| Month tot| -02:00

正如您所看到的,它允许负的持续时间标记。这给我的 Google 脚本带来了很多麻烦。

我想通过电子邮件向每个人发送每月摘要。

这是一个简单的片段:

var sheet = SpreadsheetApp.getActive().getSheetByName(...);
var monthlyTotal = sheet.getRange(1, 1).getValue(); //The total is at cell A1

现在,当我调试时,它显示我的每月总计为 Date对象,设置为Tue Dec 26 1899 14:50:28 GMT-0300 (BRT) (这是非常正确的,我的结果是 -81:16:00 ,它从 81:16 中减去 1970-01-01 00:00:00 ,没有问题)。

现在,我不知道如何恢复持续时间格式( -81:16 )。我尝试将此日期对象转换为负时间戳,但是 +monthlyTotal返回我认为错误的值( -2212132172000 )。

我不知道如何转Date对象从 1970 年之前到时间戳,因此,我不知道如何继续。

最佳答案

此问题已在 webapps.stackexchange.com 上得到解答.

简短回答

不要在日期/时间单元格上使用.getValue()。相反,将 =TO_TEXT(A1) 放在某处(或者已经有 A1 包含类似 TO_TEXT(SUM(E2:E)) 的内容,并使用 .getValue() 来获取字符串。与日期和时间不同,数字和字符串在工作表和脚本之间可靠地传递。

说明

与纪元从 1970-01-01 开始的 Unix 操作系统不同,Google 表格使用 1899 年 12 月 30 日 0:00:00 作为 0 时间,您可以通过输入 =TO_DATE(0) 电子表格中的任意位置。

原则上,您可以将 .valueOf() 应用于 .getValue() 返回的持续时间值:这会返回 JavaScript 时间戳,即 <从 1970 年初算起的毫秒数。除以 1000 得到 Unix 时间戳。

但是,这是有问题的,因为 Unix 时间戳和 JavaScript 时间戳是从 1970-01-01 00:00:00 UTC 时刻开始测量的,而 0 Google 表格的标记位于本地时区

如果您尝试使用 new Date().getTimezoneOffset(); 调整时区,请注意脚本时区可能与工作表时区不同:documentation says这是“脚本错误的常见来源”。 Spreadsheet.getSpreadsheetTimeZone() 方法给出了 Spreadsheet 本身的时区,但它以字符串形式返回,如“America/New York”,即 does not directly translate to an offset .

关于javascript - 如何使用负时间戳进行数学运算?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31548089/

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