【问题标题】:Why is Date.getMinutes() returning 2 for the time 4:00 PM?为什么 Date.getMinutes() 在下午 4:00 返回 2?
【发布时间】:2019-07-01 02:49:59
【问题描述】:

我正在创建一个在给定时间内执行一些计算的自定义函数。

当在单元格中输入时间时,例如4:00 PM,它会自动转换为日期,在这种情况下为12/30/1899 16:00:00,当调用函数getTheMinutes()时,它返回2而不是@ 987654326@.

function getTheMinutes(dateTime){
  return dateTime.getMinutes();
}

如果函数用于最近的日期,例如5/1/2019 16:00:00,则该函数的行为会有所不同。

我希望用户能够在一个单元格中写入时间,然后在另一个单元格中使用自定义功能。请让我知道你的想法。

【问题讨论】:

  • 请在您的问题中包含足够的代码以复制该问题。我不得不做出一些假设,但是使用您的代码I can't reproduce the problem
  • 您所在位置的时区偏移量可能与您的预期不同。许多地方在 1900 年之前甚至没有一个小时或半小时的偏移量。顺便说一句,“12/30/1899 16:00:00”的解析取决于实现,因此您可能会在不同的主机上得到不同的结果。
  • @Santi 这一切都发生在谷歌表格中,所以我在单元格A1 中输入4:00 PM,然后在单元格B1 中输入=getTheMinutes(A1),我得到的结果是2。当然,获取分钟数并不是我想要做的全部,而只是其中的一部分,我知道我可以为此使用函数MINUTE()。感谢您的帮助
  • @Char 还要确保您的电子表格时区和脚本时区相同
  • 如果您将日期转换为字符串,您将能够查看时区是否与您的数字混淆。

标签: date datetime google-apps-script google-sheets


【解决方案1】:

现在您已经为电子表格指明了时区,我可以确认@RobG 差不多一天前推断出的内容,即危地马拉调整了其相对于 UTC 的时差。从 1918 年 10 月 5 日起,您已确认的内容将被视为两分钟。

更具体地说,调整为2分4秒,从当天03:00开始生效:

(来源IANA版本2019b文件northamerica。)

多年来,世界各地(甚至在同一个国家的城镇之间)进行了非常多的此类细微调整,并且调整仍在继续,尽管通常持续一小时 - 在“标准”时间和夏季时间之间。 Sheets 已经非常正确地认识到,“正常算术”在这种转换中“不起作用”,例如,昨天中午到今天中午通常是,对于任何一个特定位置,24 小时的差异通常是 23 小时或 25 小时在时钟前进/后退的那一天。

这个故事的寓意是要小心不要让 Sheets 假设,因为缺少一个特定的日期,即索引号为 0 - 即是 1899 年 12 月 30 日。

【讨论】:

  • 感谢您的有益研究。
【解决方案2】:

我做了一些测试,发现公式在10/5/1918 0:03:00 之前的任何一分钟给出了错误的结果,从那个 DateTime 开始,公式按预期工作。

这是我的工作表https://docs.google.com/spreadsheets/d/1psm8_GJYRczO53TILJCOzo0p4GpnS-ooiGWqOJrC8ZU/edit?usp=sharing

我需要在我的自定义公式中进行日期验证以使其有用。我不知道为什么谷歌表格在单元格中输入时间时选择该日期作为默认日期,我认为应该改进。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-26
    • 1970-01-01
    • 1970-01-01
    • 2011-12-19
    • 1970-01-01
    相关资源
    最近更新 更多