質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

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

jQuery

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

Q&A

解決済

2回答

6302閲覧

第何週が何日から何日か

退会済みユーザー

退会済みユーザー

総合スコア0

JavaScript

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

jQuery

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

0グッド

0クリップ

投稿2018/04/26 05:51

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

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

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

年、月、第何週か

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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2018/04/26 06:02

teratailは丸投げ作業依頼のサイトではないので、まずはご自身で決めた仕様通りに組まれては?分からないことは調べて、それでも分からなければ調べたこと・やったことを持ち寄ってアドバイスをもらう場です。 https://teratail.com/help/question-tips#questionTips1-1
退会済みユーザー

退会済みユーザー

2018/04/26 06:56

わあ!そんなルールがあったとは知りませんでした!自分で書いたソースコードはありません!それこそ丸投げのつもりで質問しました。以後気をつけなければ(>_<)ご指摘ありがとうございます!
m.ts10806

2018/04/26 06:58

説明書は読みましょう。ルールから外れていれば指摘をもらうのは当たり前ですね。過去質問を拝見しましたが、ある程度ご自身が書かれたコードの提示がある質問には回答がついていたと思います。何もコードがない場合は回答者への負担が大きすぎるため、推奨されていません。「問題解決」ではなく「作業依頼」になってしまうためです。
退会済みユーザー

退会済みユーザー

2018/04/26 07:11 編集

なるほどです!でも回答者への負担が大きすぎるため推奨されてないってのは何故なんですかね、不思議です...。誰かに回答することを強要されている訳でもなく、好意で回答してくれてるのに(T_T) でも回答を得られない可能性が高くなるってのはリスクですねー(T_T)
m.ts10806

2018/04/26 07:20

逆の立場になって考えてみるといいかもしれませんね。好意での回答しているからこそ、丸投げされると大きく負担を感じて避けたくなります。 https://teratail.com/help/avoid-asking ←にあるように「プログラミングに関する問題解決をサポートする場」です。「こういうのやりたい、あとはお願い」だけでは問題解決でもサポートでも何でもありません。
退会済みユーザー

退会済みユーザー

2018/04/26 07:38

そうですね、だからそう思ったら避けたらいいと思います(>_<)。なんかいまいちピンと来なくてモヤモヤです(T_T)。そもそもなんで推奨されたことに従う必要があるんだろうって思っちゃうんですよね(T_T)。それに従う必要があるというより、それに従ったことによって得られるメリット・デメリットと、従わなかったことによって得られるメリット・デメリットを天秤にかけて自分がしたようにするだけだなあって感じです(T_T)。
m.ts10806

2018/04/26 07:41

それでは何のためのルールでしょうか。「決められたレールになんか乗らない」というのであればご自分でそういうものを作れば良いと思いますよ。「なんで法律を守らなきゃいけないの?」って言っているのと同じです。
退会済みユーザー

退会済みユーザー

2018/04/26 07:57 編集

そうですね、おっしゃてる通りでみんな、法律を守るメリットを得るために、あるいは守らないデメリットを避けるために、勝手にやってるんだなって感じです。ぼく自身も含めて自分が自分のしたいようにしてるだけというか。僕は、誰かが回答者に回答を強要してたら気の毒だな気をつけたいなとか思えるんですけど(それはどうでもよくて)。回答が得られない可能性があるっていうデメリットを考えた上で自分のしたいようにすることしかできません(T_T)退会させられたらまあ仕方ないですね(T_T)
m.ts10806

2018/04/26 08:08 編集

「守らない」という選択肢はどこの世界にもありません。ルールが定められるには理由があり方針があります。メリットデメリットはあくまでoguramk5さんのみの都合であり、本来はモラルの問題です。いずれにしても「やってほしいことだけを記載した丸投げの質問」という指摘が幾つも入っている以上、質問の仕方(を含めたサイトの利用の仕方)を改めるしかないかと。
退会済みユーザー

退会済みユーザー

2018/04/26 11:18 編集

そうなんですかね(>_<)それは誰が決めたんでしょうか。守らない選択肢はあると思います、現に守らないこともできるわけですから。だから選択肢がないわけじゃなくて、みんな守りたいと思って守ってたり、守りたくないと思って守らなかったりしてるだけですよね(>_<)。だから、ある意味みんな自由なんだけど、自分にとってのメリットとか自分の良心とかに従って行動してるだけだと思います。みんなこれは従うべきとか従わないべきとか各々勝手にやってるだけですよね(>_<)。だからある意味でぼくを注意してくださるのももちろん自由ですし、それにぼくが従うかどうかも自由かなあって思います(>_<)。だから明確な処罰が世の中にはあるんだなって思います。例えば退会させるとか。退会させることでしか解決しないってなるなら仕方ないというかもうそうしてくださいって感じです。合わないんだと思います(T_T)
m.ts10806

2018/04/26 10:45

「やってほしいことだけを記載した丸投げの質問」という指摘が幾つも入っている以上、質問の仕方(を含めたサイトの利用の仕方)を改めるしかないかと。回答がつかなくなっても良いならご自由に。
退会済みユーザー

退会済みユーザー

2018/04/26 10:52

そうですね、みんなと同じように、自分がしたいように行動します(>_<)
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
miyabi-sun

総合スコア21158

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

x_x

2018/04/26 08:27

2週目は2日から8日と言っているので、これでは出ないと思いますが
miyabi-sun

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.48%

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

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

質問する

関連した質問