gpt4 book ai didi

Javascript new Date() 返回 1969 年 12 月 31 日

转载 作者:行者123 更新时间:2023-11-30 07:56:03 25 4
gpt4 key购买 nike

我试图通过将年、月和日参数提供给 new Date() 来获取日期。像这样:

Logger.log(dates[i]);
var date = dates[i].trim();
Logger.log(date);
var dateMDY = date.split("/");
Logger.log(dateMDY);
Logger.log(parseInt(dateMDY[2], 10));
Logger.log(parseInt(dateMDY[0], 10));
Logger.log(parseInt(dateMDY[1], 10));
var finalDate = new Date(parseInt(dateMDY[2]), parseInt(dateMDY[0])-1, parseInt(dateMDY[1]));
Logger.log(finalDate);

这是日志输出:

[16-09-12 09:57:57:047 PDT] 09/24/2016
[16-09-12 09:57:57:048 PDT] 09/24/2016
[16-09-12 09:57:57:048 PDT] [09, 24, 2016]
[16-09-12 09:57:57:049 PDT] 2016.0
[16-09-12 09:57:57:050 PDT] 9.0
[16-09-12 09:57:57:050 PDT] 24.0
[16-09-12 09:57:57:051 PDT] Wed Dec 31 19:00:00 GMT-05:00 1969
[16-09-12 09:57:57:711 PDT] 09/28/2016
[16-09-12 09:57:57:712 PDT] 09/28/2016
[16-09-12 09:57:57:712 PDT] [09, 28, 2016]
[16-09-12 09:57:57:713 PDT] 2016.0
[16-09-12 09:57:57:713 PDT] 9.0
[16-09-12 09:57:57:714 PDT] 28.0
[16-09-12 09:57:57:715 PDT] Wed Dec 31 19:00:00 GMT-05:00 1969

我做错了什么?!

最佳答案

问题是 parseInt("09") 没有基数。

令人震惊的是,Google Apps 脚本(不完全是 JavaScript)中的 parseInt 仍然将字符串中的前导 0 视为八进制。 (这从来没有出现在 JavaScript 规范中,但是一些引擎实现了它;最终它被明确禁止了。)当然,八进制没有 9 数字,并且 parseInt 停止解析第一个不可解析的数字,如果没有可解析的数字,则返回 NaN。所以 parseInt("09") 返回 NaN 并且你最终将它作为月份传递给构造函数(因为 NaN - 1NaN).

如果您指定十进制基数(您在各个部分的 Logger.log 语句中指定,但在实际构建日期时没有指定!),它将解析 "09" 作为 9:

Logger.log(dates[i]);
var date = dates[i].trim();
Logger.log(date);
var dateMDY = date.split("/");
Logger.log(dateMDY);
Logger.log(parseInt(dateMDY[2], 10));
Logger.log(parseInt(dateMDY[0], 10));
Logger.log(parseInt(dateMDY[1], 10));
var finalDate = new Date(parseInt(dateMDY[2], 10), parseInt(dateMDY[0], 10)-1, parseInt(dateMDY[1], 10));
// -----------------------------------------^^^^----------------------^^^^-------------------------^^^^
Logger.log(finalDate);

输出:

[16-09-12 19:02:15:137 BST] 09/24/2016[16-09-12 19:02:15:138 BST] [09, 24, 2016][16-09-12 19:02:15:138 BST] 2016.0[16-09-12 19:02:15:139 BST] 9.0[16-09-12 19:02:15:140 BST] 24.0[16-09-12 19:02:15:140 BST] Sat Sep 24 00:00:00 GMT+01:00 2016

(通过单步执行 GAS 调试器中的代码解决了这个问题。)

关于Javascript new Date() 返回 1969 年 12 月 31 日,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39455400/

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