2018年4月第2週が、4月の何日から何日までかなどを求める方法を教えてください(>_<)
例えば上の例だと2日から8日みたいな感じで
月曜から始まって日曜で終わる
4月の1日の日曜は第1週としたいです
年、月、第何週か
この3つのデータからjavascriptでそれが何日から何日であるかを知りたいです
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
この質問の投稿者はすでに退会しているため、質問者からの返信がない点にご留意ください。
回答2件
0
日付けを扱うなら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というメソッドが用意されているので楽勝です。
JavaScript
1date.endOf('week'); 2console.log(date.format('YYYY/MM/DD')) 3// 2018/04/07
内部的には週末土曜日の23:59:59の時刻になっていますので、
もし日曜日スタートが良いなら1日足しましょう。
もし月曜日スタートが良いなら2日足しましょう。
今回は月曜日スタートなので+2日ですね。
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のドキュメントを眺めていれば「おっ、これ日付け計算に使えそうじゃん」というメソッドが必ず用意されています。
私もこのドキュメントは一通り暗記してあって、主なものはすぐに使えますし、忘れてしまってもああいう事はこの辺に書いてあったっけということですぐに調べて作り上げる事が出来ます。
まずはこのドキュメントを上から下までしっかり読んでみて下さい。
そうすればすぐに日付け計算のエキスパートになれますよ。
投稿2018/04/26 08:17
編集2018/04/26 08:38退会済みユーザー
総合スコア0
0
ベストアンサー
指定月を超えるかもしれませんが
JavaScript
1function getWeekOfMonth(year, month, weekNumber) { 2 let start = new Date(year, month - 1, (weekNumber - 1) * 7 + 1); 3 let day = start.getDay(); 4 start.setDate(start.getDate() + (day ? 1 - day : -6)); 5 let end = new Date(start); 6 end.setDate(end.getDate() + 6); 7 return { start: start, end: end } 8}
投稿2018/04/26 06:32
総合スコア13749
退会済みユーザー
2018/04/26 10:14 編集
退会済みユーザー
2018/04/26 10:20 編集
退会済みユーザー
2018/04/26 10:23
退会済みユーザー
2018/04/26 10:36
退会済みユーザー
2018/04/27 15:37
この質問の投稿者はすでに退会しているため、質問者からの返信やベストアンサーの選定がない点にご留意ください。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
2018/04/26 08:27
退会済みユーザー
2018/04/26 08:31
退会済みユーザー
2018/04/26 09:59