日付けを扱うならMoment.jsが最強なんでまずはこれを覚えましょう。
HTML
1<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.1/locale/ja.js"></script>
これをHTMLの上の方に差し込むとmoment
という関数が使えるようになります。
あなたのサイトに差し込んで開いた後に、F12を押してコンソール画面を開いてください。
(コンソールで打ち込んで確認するだけならMoment.jsの公式サイト内でも可能です。)
2018年4月第2週を求める
まずは4月1日を作りましょう。
日付けは下記のフォーマットで確認出来ます。
Docment parse object
Document display format
JavaScript
1var date = moment({
2 y: 2018,
3 M: 4 - 1, // JSの罠で月だけ0スタートなので1引いておく
4 d: 1
5}
6console.log(date.format('YYYY/MM/DD'))
7// 2018/04/01
次に週末にジャンプします。
週末への移動はendOf
というメソッドが用意されているので楽勝です。
Document manipulate end-of
JavaScript
1date.endOf('week');
2console.log(date.format('YYYY/MM/DD'))
3// 2018/04/07
内部的には週末土曜日の23:59:59の時刻になっていますので、
もし日曜日スタートが良いなら1日足しましょう。
もし月曜日スタートが良いなら2日足しましょう。
今回は月曜日スタートなので+2日ですね。
Document manipulate add
JavaScript
1date.add(2, 'days')
2console.log(date.format('YYYY/MM/DD'))
3// 2018/04/09
4月の何日から何日までかなどを求める
1週間は基本的に7日なので最初の日から6日足した数になります。
date.formatで出力した日数は文字列なので、
計算する前にparseIntを使って数値に戻してあげましょう。
JavaScript
1var start = parseInt(date.format('DD'))
2var end = start + 6
3console.log(start, end) // 9, 16
従って、第二週は9〜16日です。
あれ?ちょっと待ってください、質問文の条件は日曜日が週末扱いなので1週間ずれていますね。
このように月曜日スタートかつ1日目が日曜日の場合、
Moment.jsでは日曜日を週の初めとしますので丸々1週間分ずれます。
従って7日減算して対応しましょう。
JavaScript
1var start = parseInt(date.format('DD'))
2if (start > 7) {
3 start = start - 7
4}
5var end = start + 6
6console.log(start, end) // 2, 8
※もし最終週を求める場合は週の途中で月が変わる可能性が高いので、別途月末のものを作成して日付けが超えそうなら少ない方の日数を答えとしましょう。
いかがですか?
Moment.jsが最強ということが分かったと思います。
困ったらMoment.jsのドキュメントを眺めていれば「おっ、これ日付け計算に使えそうじゃん」というメソッドが必ず用意されています。
私もこのドキュメントは一通り暗記してあって、主なものはすぐに使えますし、忘れてしまってもああいう事はこの辺に書いてあったっけということですぐに調べて作り上げる事が出来ます。
まずはこのドキュメントを上から下までしっかり読んでみて下さい。
そうすればすぐに日付け計算のエキスパートになれますよ。