質問するログイン新規登録

Q&A

解決済

2回答

6823閲覧

第何週が何日から何日か

退会済みユーザー

退会済みユーザー

総合スコア0

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

0グッド

0クリップ

投稿2018/04/26 05:51

0

0

2018年4月第2週が、4月の何日から何日までかなどを求める方法を教えてください(>_<)

例えば上の例だと2日から8日みたいな感じで
月曜から始まって日曜で終わる

4月の1日の日曜は第1週としたいです

年、月、第何週か

この3つのデータからjavascriptでそれが何日から何日であるかを知りたいです

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

guest

この質問の投稿者はすでに退会しているため、質問者からの返信がない点にご留意ください。

回答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というメソッドが用意されているので楽勝です。

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のドキュメントを眺めていれば「おっ、これ日付け計算に使えそうじゃん」というメソッドが必ず用意されています。
私もこのドキュメントは一通り暗記してあって、主なものはすぐに使えますし、忘れてしまってもああいう事はこの辺に書いてあったっけということですぐに調べて作り上げる事が出来ます。

まずはこのドキュメントを上から下までしっかり読んでみて下さい。
そうすればすぐに日付け計算のエキスパートになれますよ。

投稿2018/04/26 08:17

編集2018/04/26 08:38
退会済みユーザー

退会済みユーザー

総合スコア0

x_x

2018/04/26 08:27

2週目は2日から8日と言っているので、これでは出ないと思いますが
退会済みユーザー

退会済みユーザー

2018/04/26 08:31

おっと…書いてから Moment.jsは日曜〜土曜なのでたまにレアケースにぶち当たる気がしましたが、それが2018-04-01だったのですね… 書き直しますので少々お待ちを
退会済みユーザー

退会済みユーザー

2018/04/26 09:59

moment.js、使ったことあります!ありがとうございます、手が空いたのでやってみます
guest

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

x_x

総合スコア13749

退会済みユーザー

退会済みユーザー

2018/04/26 06:56

ありがとうございます!!! 試してみます(>___<)
退会済みユーザー

退会済みユーザー

2018/04/26 10:14 編集

すみません、ちょっと僕には難しすぎて let start = new Date(year, month - 1, (weekNumber - 1) * 7 + 1); 前の月の、(何週か-1)*7+1のdateオブジェクトがなぜ必要なのでしょうか。 その先のコードを読んでみてもいまいち難しくて... このstartはどのような意味を持つのでしょうか
退会済みユーザー

退会済みユーザー

2018/04/26 10:20 編集

(何週か-1)*7+1だと何週か+1で必然的に月曜、つまり週の初めが導き出されるのですね... でもなぜ先月のなんでしょうか
退会済みユーザー

退会済みユーザー

2018/04/26 10:23

すみません、全然違うこと言ってますね、混乱してきました(T_T)
退会済みユーザー

退会済みユーザー

2018/04/26 10:36

day はその月の最初の曜日を数字にしたもの(一週間を0から6で表したもの)で、start.getDate()は指定された週間のdayの数字ですよね、ちょっと日本語が変でごめんなさい start.setDate(start.getDate() + (day ? 1 - day : -6)); ただこれで、その週の月曜の日付を得られるのが分かりません...
x_x

2018/04/26 15:27

> 前の月の、(何週か-1)*7+1のdateオブジェクトがなぜ必要なのでしょうか。 前の月ではありません。当月です。miyabi-sunさんもちらと書かれていましたが、Dateの月は0から始まります。 https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Date 1週目には1日が、2週目には8日が必ず含まれます(以降同様)。なのでその計算となります。 > その週の月曜の日付を得られるのが分かりません... 日曜なら6日前、月~土なら0~5日前が開始日ということになりますので、それを計算したものです。
退会済みユーザー

退会済みユーザー

2018/04/27 15:37

理解しました、めちゃ助かりました(ノ_<) ありがとうございます!
guest

この質問の投稿者はすでに退会しているため、質問者からの返信やベストアンサーの選定がない点にご留意ください。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.25%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問