Google 脚本中的增量日期
Increment date in Google Script
我只想将单元格 A1 中的给定日期增加 1 天。我需要两个单独的变量,一个用于给定日期,一个用于新的递增日期。问题是,我的代码总是更改两个变量,我不知道为什么。
function testDate() {
var sht_test = SpreadsheetApp.getActive().getSheetByName('Test');
var date_given = sht_test.getRange(1,1).getValue(); // type a Date in cell A1
var date_new;
date_new = date_given;
date_new = new Date(date_new.setDate(date_new.getDate() +1 ));
sht_test.getRange(2,1).setValue(date_new);
sht_test.getRange(2,2).setValue(date_given);
}
问题/解释:
在这部分代码中:
date_new = date_given;
您将 date_given
的 reference 传递给 date_new
。
即,您对 date_new
所做的任何更改都会自动应用于 date_given
,因为它们引用 相同 日期对象。
当您将日期递增 1 时:
date_new = new Date(date_new.setDate(date_new.getDate() +1 ));
部分:date_new.setDate(date_new.getDate() +1 )
增量(更改)date_new
因此 date_given
也被修改,因为它们都引用同一个对象。
这就是为什么date_new
和date_given
return值相同的原因。
为了将它们分开,您需要创建一个 date_given
的副本,这将是一个新的日期对象:
date_new = new Date(date_given);
因此,如果您稍后修改 date_new
,date_given
将不会被修改。
解决方案:
function testDate() {
var sht_test = SpreadsheetApp.getActive().getSheetByName('Test');
var date_given = sht_test.getRange(1,1).getValue(); // type a Date in cell A1
var date_new;
date_new = new Date(date_given);
date_new = new Date(date_new.setDate(date_new.getDate() +1 ));
sht_test.getRange(2,1).setValue(date_new);
sht_test.getRange(2,2).setValue(date_given);
}
我只想将单元格 A1 中的给定日期增加 1 天。我需要两个单独的变量,一个用于给定日期,一个用于新的递增日期。问题是,我的代码总是更改两个变量,我不知道为什么。
function testDate() {
var sht_test = SpreadsheetApp.getActive().getSheetByName('Test');
var date_given = sht_test.getRange(1,1).getValue(); // type a Date in cell A1
var date_new;
date_new = date_given;
date_new = new Date(date_new.setDate(date_new.getDate() +1 ));
sht_test.getRange(2,1).setValue(date_new);
sht_test.getRange(2,2).setValue(date_given);
}
问题/解释:
在这部分代码中:
date_new = date_given;
您将 date_given
的 reference 传递给 date_new
。
即,您对 date_new
所做的任何更改都会自动应用于 date_given
,因为它们引用 相同 日期对象。
当您将日期递增 1 时:
date_new = new Date(date_new.setDate(date_new.getDate() +1 ));
部分:date_new.setDate(date_new.getDate() +1 )
增量(更改)date_new
因此 date_given
也被修改,因为它们都引用同一个对象。
这就是为什么date_new
和date_given
return值相同的原因。
为了将它们分开,您需要创建一个 date_given
的副本,这将是一个新的日期对象:
date_new = new Date(date_given);
因此,如果您稍后修改 date_new
,date_given
将不会被修改。
解决方案:
function testDate() {
var sht_test = SpreadsheetApp.getActive().getSheetByName('Test');
var date_given = sht_test.getRange(1,1).getValue(); // type a Date in cell A1
var date_new;
date_new = new Date(date_given);
date_new = new Date(date_new.setDate(date_new.getDate() +1 ));
sht_test.getRange(2,1).setValue(date_new);
sht_test.getRange(2,2).setValue(date_given);
}