2016-08-08 11 views
0

Googleスプレッドシートを使用する。私は、シートの変更された日付から2週間以内のデータエントリをチェックしようとしています。だから私は1、2、3 ... 14日を入力日から設定されている可変日付が必要です。私は尋することができない理由から予期せずに日数を積算するsetDate()

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 

答えて

2

あなたはポインタの問題があるかもしれませんが、私はよく分かりません。ここでは私のために働いた:

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)) 
    } 
    } 

私はあなたのループの順序を切り替えたことに気付くでしょう。あなたが持っている方法では、2週間で1日増やすのではなく、2週間増やして1日増やします。

また、Date.parse(dateObject)を使用してミリ秒に変換することでビットを簡略化しました。これは、日付を操作する簡単な方法です。その後、各ループでvariableDateが1日増えますが、startFortnightDateはそのままです。表示するには、new Date(milliseconds)を使用して日付オブジェクトに変換し直します。日付オブジェクトのためのW3Schoolsの参照は非常に徹底していると私に何回も支援してきました:

[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 
+0

ティファニーが正しいです。これでいつでも試すことができます: 'var d1 = new Date(); var d2 = d1; d2.setDate(1); Logger.log(d1.toLocaleString()); ' – some1

関連する問題