2016-05-22 11 views
0

私はこれにかなり新しいので、その答えが明らかに明白であれば謝ります。日に日を追加する - Googleスクリプト

今日の日付から日を加算したり減算したりしようとしています。最終的には、次の月曜日と最後の月曜日の日付を計算することになります。

私は最初の問題を解決したhereを見たことがありますが、次は私を困惑させます。今日の日付から日数を差し引くことは問題ありません。追加すると無効な日付が返されます。

コードは次のとおりです。

function findDate() { 
    var d = new Date(); 
    var n = d.getDay(); 
    var makeDate = new Date(d.setDate(d.getDate())); 
    Logger.log(makeDate) 
    var weekDaysTo = new Array(7); //array of days to following Monday 
    weekDaysTo[0]= 1 
     weekDaysTo[1] = 7 
     weekDaysTo[2] = 6 
     weekDaysTo[3] = 5 
     weekDaysTo[4] = 4 
     weekDaysTo[5] = 3 
     weekDaysTo[6] = 2 

    Logger.log('weekDaysTo gives '+weekDaysTo[n]) 

    var weekDaysFrom = new Array(7); //array of days to previous Monday 
     weekDaysFrom[0]= 6 
     weekDaysFrom[1] = 0 
     weekDaysFrom[2] = 1 
     weekDaysFrom[3] = 2 
     weekDaysFrom[4] = 3 
     weekDaysFrom[5] = 4 
     weekDaysFrom[6] = 5 

    var prevMon = new Date(makeDate+weekDaysTo[n]*3600000*24); //Converts ms  into days and adds 

    Logger.log('Next Monday is '+prevMon); 

    var followingMon = new Date(makeDate-weekDaysFrom[n]*3600000*24); //Converts ms into days 
    Logger.log('Last Monday was ' +followingMon); 

ログ出力は次のとおりです。

[16-05-22 21:17:58:419 ICT] Sun May 22 21:17:58 GMT+07:00 2016 
[16-05-22 21:17:58:419 ICT] weekDaysTo gives 1 
[16-05-22 21:17:58:420 ICT] Next Monday is Invalid Date 
[16-05-22 21:17:58:420 ICT] Last Monday was Mon May 16 2016 21:17:58 GMT+0700 (ICT) 

これは関係なく、私がこれまでに付加価値のあります。減算がうまく動作する理由はわかりませんが、追加すると無効な日付が発生します。追加された数を変更することは効果がなく、減算に変更されます。

答えて

0

JavaScriptはオペランドのタイプによって異なる加減算を処理するためです。あなたの例では

> new Date() 
Sun May 22 2016 14:45:00 GMT+0000 (UTC) 
> new Date()+1 
'Sun May 22 2016 14:45:05 GMT+0000 (UTC)1' 
> new Date()-1 
1463928307077 

、あなたは追加を行う前に、どちらか+makeDateまたはmakeDate.getTime()を行うことによって、ミリ秒にmakeDateを変換してみてください。例えば

、代わりに:

var prevMon = new Date(makeDate+weekDaysTo[n]*3600000*24); 

試してみてください。

var prevMon = new Date(+makeDate+weekDaysTo[n]*3600000*24); 
+0

!新しいことを学びました。ありがとうございました! –

0

次月曜日取得するための非常に複雑なコードです。おそらくそれは機能しますが、はるかに単純なアルゴリズムを検討してください。うまくいけば、コメントで十分です:

/* Given a date, return a new date for the following Monday. 
 
** If date is a Monday, returns the following Monday. 
 
** 
 
** @param {Date} date - date to get next Monday of. 
 
**     - Default is current date. 
 
** @returns {Date} - date for next Monday. 
 
*/ 
 
function getNextMonday(date) { 
 
    // Copy provided date or use current date 
 
    date = date? new Date(+date) : new Date(); 
 

 
    // Get the day number 
 
    var dayNum = date.getDay(); 
 

 
    // Set date to next Monday 
 
    date.setDate(date.getDate() + (dayNum? 8 - dayNum: 1)); 
 
    return date; 
 
} 
 

 
var x = new Date(2016,4,29) 
 
document.write('Start date: ' + x + '<br>Next Monday: ' + getNextMonday(x)); 
 
x = new Date(); 
 
document.write('<br><br>Start date: ' + x + '<br>Next Monday: ' + getNextMonday());

はここで前の月曜日を取得するための同様の機能です:それを持っている

function getPreviousMonday(date) { 
    date = date? new Date(+date) : new Date(); 
    var dayNum = date.getDay(); 
    // If Sunday, subtract 6. If Monday, subtract 7. Otherwise subtract dayNum - 1 
    date.setDate(date.getDate() - (dayNum? (dayNum - 1 || 7) : 6)); 
    return date; 
} 
+0

畳み込みは、私の大学時代から私のプロガミング(そしておそらく私!)を表現するために使用される単語です。 これははるかに優雅です。ありがとうございました。 –

関連する問題