2017-08-27 23 views
1

私は日付を受け取って、その日が月曜日から日曜日までの週から毎日返す関数を持っています。配列を返すでしょう日曜日に月曜日を取得する

input into function: 2017-08-24T19:37:09-04:00

:例えばだから、

function getMonday(d) { 
    d = new Date(d); 
    var day = d.getDay() || 7; 
    var diff = d.getDate() - day + (day == 0 ? -6:1); 
    for (var i = 0; i <= 6; i++) { 
     var date = new Date(d.setDate(diff+i)); 
     dateRange.push(moment(date).format()); 
     console.log(dateRange); 
    } 
} 
:ここ

[ 
    "2017-08-21T19:37:09-04:00", 
    "2017-08-22T19:37:09-04:00", 
    "2017-08-23T19:37:09-04:00", 
    "2017-08-24T19:37:09-04:00", 
    "2017-08-25T19:37:09-04:00", 
    "2017-08-26T19:37:09-04:00", 
    "2017-08-27T19:37:09-04:00" 
] 

は、私がこれまでに(私はmomentjsを使用しています)したコードです

これは問題なく動作しますが、入力次のとおりです。この場合getMonday(new Date('2017-07-31T19:44:06-04:00')) ...

それが返されます。それは数ヶ月に増加していると明らかに間違っている

2017-07-31T19:44:06-04:00 2017-08-01T19:44:06-04:00 2017-09-02T19:44:06-04:00 2017-10-04T19:44:06-04:00 2017-11-04T19:44:06-04:00 2017-12-06T19:44:06-04:00 2018-01-06T19:44:06-04:00

を...

何が起こっていますか?私は行方不明だと簡単にこれを修正する方法はありますか?

ありがとうございます!

答えて

2

問題は、元の日の-月31言うの与えられた、によって、月の周りにアップするたびにdをぶつけてしまい、各ループにdiff + idを変異していることであるように思われます。 44::06このような

何かが単純

function getMonday(inputDate) { 
 
    let d = new Date(inputDate) 
 
    let out = [] 
 
    
 
    // set to "Sunday" for the previous week 
 
    d.setDate(d.getDate() - (d.getDay() || 7)) // if getDay is 0 (Sunday), take 7 days 
 
    for (let i = 0; i < 7; i++) { // note, the value of i is unused 
 
    out.push(new Date(d.setDate(d.getDate() + 1))) // increment by one day 
 
    } 
 
    return out 
 
} 
 

 
const input = '2017-08-27T19:44:06' 
 
console.info(getMonday(input).map(d => d.toString()))

+1

非常に素晴らしく、きれいなコード..私はちょうど問題を抱えている '入力=「2017-08-27T19する必要があります-04:00''それはその特定の週の 'monday-sunday'を返さないので、それは来週のそれを示す...どんな考えですか? –

+0

@ JaneDoeああ、問題は、私のコードは、週の最初の日ではなく、最後の日と仮定しています。私は何ができるかを見てみよう。 – Phil

+0

@JaneDoeはすごくいいはずだ – Phil

関連する問題