【问题标题】:How do I use a negative timestamp to do math?如何使用负时间戳进行数学运算?
【发布时间】:2015-07-21 19:36:27
【问题描述】:

我正在使用 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 Scripts 中给我带来了很多麻烦。

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

这是一个简单的 sn-p:

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

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

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

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

【问题讨论】:

标签: javascript datetime google-apps-script


【解决方案1】:

这个问题已经在webapps.stackexchange.com回答了。

简答

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

说明

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

原则上,您可以将.valueOf() 应用于.getValue() 返回的持续时间值:这将返回JavaScript 时间戳,即从1970 年初开始的毫秒秒数。除以1000 给出了 Unix 时间戳。

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

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

【讨论】:

    【解决方案2】:

    您的+monthlyTotal1970-01-01 00:00:00Tue Dec 26 1899 14:50:28 GMT-0300 (BRT) 之间的毫秒数。

    时间戳是什么意思?从您的Date 对象中,您可以getUTC___() 根据UTC 时间获取您需要的内容。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-05-16
      • 1970-01-01
      • 2018-08-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-06
      相关资源
      最近更新 更多