我正在做日期的一些操作。我已经检查过教程,所以要将日期增加一天我确保将日期转换为' ms'我只需添加' 86400000'。 通过DST更改日期时出现问题。
我想避免使用任何条件来检查日期,因为我在一些循环中使用它们,我可以将它们与其他日期进行比较。拥有额外的IF可能会严重影响效率,特别是在几千个条目中,它可能只会改变2-3次。
我试图改变
"timeZone": "Europe/London"
在appscript.json中,#34;日本" (他们不使用夏令时)但没有任何事情发生。
是否有解决此问题的简单方法,还是我必须制作一些解决方法代码或额外条件?提前谢谢!
编辑:这是我检查和比较日期的代码的一部分。
var dayMS = 24*60*60*1000;
var check_date = variables_sheet.getRange(2,1).getValue().getTime(); //get starting date
for (var i=1; i<=length; i++) {
if (check_date == Dates_Table[i][0].getTime())
{
sum = sum + Flow_Table[i][0]; //make a sum of values from the same date
}
else {
target_sheet.appendRow([new Date(check_date), "B", "C", sum, Balance_Table[i-1][0]]); //write consolidated days with sum
check_date = check_date+dayMS; //increment days
i--; //go back
sum = 0; //reset sum
}
};
答案 0 :(得分:1)
从问题的标题,&#34;如何避免DST&#34; - 你不能。许多时区的当地时间都有夏令时。您无法避免 - 而是必须使用能够解释它的API。
因为您已将dayMS
指定为相等的24小时,所以您正在努力解决此问题。典型的1小时DST过渡天数可以是23或25小时。它也可能具有30分钟长的转换,这可能是由于DST(在至少一个时区中),或者仅仅因为时区的标准时间偏移发生了变化。
因此,在计算天数时,不要假设它们是固定的时间单位。它们的变化方式与每个月的天数不同,闰年的日期比常年多一天。想想,&#34;日期数学!=时间数学&#34;。
在上面的代码中,无需再拨打getTime()
。只需将值保留为Date
个对象,并使用tehhowch在问题注释中指出的机制。换句话说,删除所有.getTime()
次出现后,请使用以下日期推进日期:
check_date.setDate(check_date.getDate() + 1 ));
此变异 check_date
变量,因此没有赋值。
这很好,但是这种方法存在一个问题 - 即如果结果值正好位于&#34;间隙的中间。 (例如由春季前进DST过渡创建的那个),它将被调整为其他一些合法值。根据Google的应用程序脚本实现,它可能向前调整或者可能向后调整(我不确定哪个副手)。这可能适用于单次事件,但我怀疑您是否希望继续使用该调整后的值。因此,在单独的变量(例如,x
)中跟踪基准日期的整数天数可能更安全 - 然后,不是一次一天推进check_date
,而是“#{1}}。 d每次循环重新创建check_date
并添加x
天。