gpt4 book ai didi

javascript - setDate() 意外累积天数

转载 作者:行者123 更新时间:2023-11-28 18:27:32 26 4
gpt4 key购买 nike

使用 Google 表格。我正在尝试检查工作表中更改日期后两周内的数据条目。所以我需要一个可变日期,设置为输入日期后 1、2、3...14 天。

var startFortnightDate = ss.getSheetByName('FortnightValidation').getRange('C3').setValue("=to_date("+e.value+")").getValue();
var variableDate = startFortnightDate;
//Loop start
for (var dayCount = 1; dayCount < 8; dayCount++) {//each day of the week
for (var weekCount = 0; weekCount < 2; weekCount++) {//each week of the fortnight
variableDate = startFortnightDate;//this is to reset the date to allow setting of the date to variable number of days forward
variableDate.setDate(variableDate.getDate() + (dayCount + (7*weekCount)));//This changes the date and accumulates if it isn't reset????
Logger.log("Line 197. variableDate = " + variableDate);
Logger.log("Line 199 " + startFortnightDate);
}
}
//Loop end

由于我无法理解的原因,即使我在每个循环中进行重置,fortnightStartDate 似乎也在累积以及variableDate。是否将 startFortnightDate 的值以外的值分配给了 variableDate?

部分日志如下:

[16-08-08 16:01:43:609 AEST] Line 199 Mon Feb 13 2389 00:00:00 GMT+1100 (AEDT)
[16-08-08 16:01:43:609 AEST] Line 197. variableDate = Mon Feb 27 2389 00:00:00 GMT+1100 (AEDT)
[16-08-08 16:01:43:610 AEST] Line 199 Mon Feb 27 2389 00:00:00 GMT+1100 (AEDT)
[16-08-08 16:01:43:610 AEST] Line 197. variableDate = Tue Feb 28 2389 00:00:00 GMT+1100 (AEDT)
[16-08-08 16:01:43:611 AEST] Line 199 Tue Feb 28 2389 00:00:00 GMT+1100 (AEDT)
[16-08-08 16:01:43:611 AEST] Line 197. variableDate = Wed Mar 08 2389 00:00:00 GMT+1000 (AEST)
[16-08-08 16:01:43:611 AEST] Line 199 Wed Mar 08 2389 00:00:00 GMT+1000 (AEST)
[16-08-08 16:01:43:612 AEST] Line 197. variableDate = Fri Mar 10 2389 00:00:00 GMT+1000

最佳答案

您可能遇到指针问题,但我不确定。这是对我有用的:

var startFortnightDate = ss.getSheetByName('FortnightValidation').getRange('C3').setValue("=to_date("+e.value+")").getValue(); 
//var startFortnightDate = new Date(); // Used for testing since I don't have your spreadsheet
startFortnightDate = Date.parse(startFortnightDate); // Convert date object to milliseconds
var variableDate = startFortnightDate;
var inc = 24*60*60*1000; // One day in milliseconds
for (var weekCount = 0; weekCount<2; weekCount++){
for (var dayCount = 1; dayCount<8; dayCount++){
variableDate += inc; // Add one day
Logger.log('startFortnightDate = %s',new Date(startFortnightDate))
Logger.log('variableDate = %s',new Date(variableDate))
}
}

您会注意到我改变了循环的顺序。按照你的方式,你增加两周,然后增加一天,而不是两周增加一天。

我还通过使用 Date.parse(dateObject) 转换为毫秒来简化了它,这对我来说是一种更简单的操作日期的方法。然后,在每个循环中,variableDate 增加一天,但 startFortnightDate 保持原样。为了显示,使用new Date(milliseconds)转换回日期对象。 w3schools 的日期对象引用非常全面,多次帮助了我:

http://www.w3schools.com/jsref/jsref_obj_date.asp

这是我的日志的一部分:

[16-08-08 03:00:08:361 EDT] startFortnightDate = Mon Aug 08 03:00:08 GMT-04:00 2016
[16-08-08 03:00:08:362 EDT] variableDate = Tue Aug 09 03:00:08 GMT-04:00 2016
[16-08-08 03:00:08:363 EDT] startFortnightDate = Mon Aug 08 03:00:08 GMT-04:00 2016
[16-08-08 03:00:08:363 EDT] variableDate = Wed Aug 10 03:00:08 GMT-04:00 2016
[16-08-08 03:00:08:364 EDT] startFortnightDate = Mon Aug 08 03:00:08 GMT-04:00 2016
[16-08-08 03:00:08:365 EDT] variableDate = Thu Aug 11 03:00:08 GMT-04:00 2016
[16-08-08 03:00:08:365 EDT] startFortnightDate = Mon Aug 08 03:00:08 GMT-04:00 2016
[16-08-08 03:00:08:366 EDT] variableDate = Fri Aug 12 03:00:08 GMT-04:00 2016
[16-08-08 03:00:08:367 EDT] startFortnightDate = Mon Aug 08 03:00:08 GMT-04:00 2016
[16-08-08 03:00:08:367 EDT] variableDate = Sat Aug 13 03:00:08 GMT-04:00 2016

关于javascript - setDate() 意外累积天数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38822277/

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