【发布时间】:2023-03-29 04:09:01
【问题描述】:
我创建了一个函数来生成日期数组 arr,从 2013 年 1 月 1 日开始,以 1 个月为增量,一直持续到现在。
function getDateRange() {
var start = new Date('1/1/2013');
var today = new Date();
var arr = [start];
var next = new Date(start);
while (next < today) {
arr.push(next);
next = new Date(next.setMonth(next.getMonth() + 1));
}
Logger.log(arr);
Logger.log(arr.map(formatDate));
}
function formatDate(d) {
return Utilities.formatDate(d, 'MST', 'MMM-dd');
}
函数正确生成arr,如下所示:
Jan 01 2013 00:00:00 GMT-0700 (MST),Fri Feb 01 2013 00:00:00 GMT-0700 (MST),Fri Mar 01 2013 00:00:00 GMT-0700 (MST),Mon Apr 01 2013 00:00:00 GMT-0600 (MDT),Wed May 01 2013 00:00:00 GMT-0600 (MDT)...
但是当我登录 arr.map(formatDate) 时,我没有从第 4 个日期开始得到相同的日期:
Jan-01,Feb-01,Mar-01,Mar-31,Apr-30...
任何想法为什么 Utilities.formatDate 搞砸了日期?
【问题讨论】:
-
Jan 01 2013 00:00:00 GMT-0700 (MST)在格式化为MMM-dd时应为Jan-01 -
前三个日期看起来不错,但之后日期开始变得奇怪。
-
啊,这是夏令时。您可以看到从 3 月到 4 月的时区偏移量变化。由于您的日期时间设置为
00:00:00并且您格式化为旧时区,因此您会损失一个小时并回滚到上个月。 -
愚蠢的夏令时。接得好。谢谢@VLAZ
-
你不应该依赖
new Date(string)跨浏览器甚至同一浏览器的版本返回正确的日期,除非版本是最新的并且string的格式是yyyy-MM-dd或yyyy-MM-ddTHH:mm:ss.见Why does Date.parse give incorrect results?。
标签: javascript date google-apps-script while-loop