2017-08-23 5 views
0

私はこの小さなコードを(多くのSOスレッドの助けを借りて)ビルドしていますが、それは過去2年間でうまくいきましたが、2018年に最初の週を誤って解釈します。JS今日のうち

function getDateOutWeek(week, year, lastDay) { 
 
    var d = new Date(year, 0, 1 + (week) * 7); 
 
    var day = d.getDay(); 
 
    var firstDay = d.getDate() - day + (day === 0 ? -6 : 1); // adjust when day is sunday 
 

 
    if (!lastDay) { 
 
     alert(new Date(d.setDate(firstDay)).toDateString()); 
 
    } else { 
 
     alert(new Date(d.setDate(firstDay + 6)).toDateString()); 
 
    } 
 

 
} 
 

 
getDateOutWeek("1", "2018");

これは、2018年8月1日を返しますが、2018年1月1日を返す必要があります。 そこの最初の行に既に発生していますcalculate 1 + (week) * 7 = 8。私はここで正しい値を得る方法を理解できません。

+1

正常に動作しますか? 2018年1月8日は、出力が言うように、月曜日です。あなたは何を見たいですか? –

+0

それは2018年1月1日であるべきです。原因1月8,2018は第2週です – Doomenik

+0

なぜ '1 +(week)'ですか? – Nemani

答えて

2

1週間に1を追加したのはなぜですか? 次のコードは、出力と間違って何

function getDateOutWeek(week, year, lastDay) { 
 
    var d = new Date(year, 0, week* 7); 
 
    var day = d.getDay(); 
 
    var firstDay = d.getDate() - day + (day === 0 ? -6 : 1); // adjust when day is sunday 
 

 
    if (!lastDay) { 
 
     alert(new Date(d.setDate(firstDay)).toDateString()); 
 
    } else { 
 
     alert(new Date(d.setDate(firstDay + 6)).toDateString()); 
 
    } 
 

 
} 
 

 
getDateOutWeek("1", "2018")

+0

私は確かに+ 1の理由を持っていた。それは簡単ではない:D真剣にこれはトリックを行うだろう、私はちょうど私が理由を+1した理由を挿入信じていない。 – Doomenik

+0

上記のコードは2013年にも動作します(1月7日の月を返すので、おそらく理由はありません;)おそらく、あなたは既に 'day === 0? -6:1' – Stephan

+0

あなたは最初の週を0週目と呼んでいると思っていたかもしれませんが、私は確信していません – Nemani