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

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

ただいまの
回答率

90.84%

  • JavaScript

    14849questions

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

  • jQuery

    6169questions

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

第何週が何日から何日か

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 326

oguramk5

score 28

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

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

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

年、月、第何週か

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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • oguramk5

    2018/04/26 19:43 編集

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

    キャンセル

  • mts10806

    2018/04/26 19:45

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

    キャンセル

  • oguramk5

    2018/04/26 19:52

    そうですね、みんなと同じように、自分がしたいように行動します(>_<)

    キャンセル

回答 2

checkベストアンサー

+1

指定月を超えるかもしれませんが

function getWeekOfMonth(year, month, weekNumber) {
  let start = new Date(year, month - 1, (weekNumber - 1) * 7 + 1);
  let day = start.getDay();
  start.setDate(start.getDate() + (day ? 1 - day : -6));
  let end = new Date(start);
  end.setDate(end.getDate() + 6);
  return { start: start, end: end }
}

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/04/26 15:56

    ありがとうございます!!!
    試してみます(>___<)

    キャンセル

  • 2018/04/26 19:14 編集

    すみません、ちょっと僕には難しすぎて

    let start = new Date(year, month - 1, (weekNumber - 1) * 7 + 1);

    前の月の、(何週か-1)*7+1のdateオブジェクトがなぜ必要なのでしょうか。
    その先のコードを読んでみてもいまいち難しくて...

    このstartはどのような意味を持つのでしょうか

    キャンセル

  • 2018/04/26 19:18 編集

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

    キャンセル

  • 2018/04/26 19:23

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

    キャンセル

  • 2018/04/26 19:36

    day はその月の最初の曜日を数字にしたもの(一週間を0から6で表したもの)で、start.getDate()は指定された週間のdayの数字ですよね、ちょっと日本語が変でごめんなさい

    start.setDate(start.getDate() + (day ? 1 - day : -6));

    ただこれで、その週の月曜の日付を得られるのが分かりません...

    キャンセル

  • 2018/04/27 00: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/28 00:37

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

    キャンセル

0

日付けを扱うならMoment.jsが最強なんでまずはこれを覚えましょう。

<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

var date = moment({
  y: 2018,
  M: 4 - 1, // JSの罠で月だけ0スタートなので1引いておく
  d: 1
}
console.log(date.format('YYYY/MM/DD'))
// 2018/04/01

次に週末にジャンプします。
週末への移動はendOfというメソッドが用意されているので楽勝です。

Document manipulate end-of

date.endOf('week');
console.log(date.format('YYYY/MM/DD'))
// 2018/04/07

内部的には週末土曜日の23:59:59の時刻になっていますので、
もし日曜日スタートが良いなら1日足しましょう。
もし月曜日スタートが良いなら2日足しましょう。

今回は月曜日スタートなので+2日ですね。

Document manipulate add

date.add(2, 'days')
console.log(date.format('YYYY/MM/DD'))
// 2018/04/09

4月の何日から何日までかなどを求める

1週間は基本的に7日なので最初の日から6日足した数になります。
date.formatで出力した日数は文字列なので、
計算する前にparseIntを使って数値に戻してあげましょう。

var start = parseInt(date.format('DD'))
var end = start + 6
console.log(start, end) // 9, 16

従って、第二週は9〜16日です。
あれ?ちょっと待ってください、質問文の条件は日曜日が週末扱いなので1週間ずれていますね。
このように月曜日スタートかつ1日目が日曜日の場合、
Moment.jsでは日曜日を週の初めとしますので丸々1週間分ずれます。
従って7日減算して対応しましょう。

var start = parseInt(date.format('DD'))
if (start > 7) {
  start = start - 7
}
var end = start + 6
console.log(start, end) // 2, 8

※もし最終週を求める場合は週の途中で月が変わる可能性が高いので、別途月末のものを作成して日付けが超えそうなら少ない方の日数を答えとしましょう。


いかがですか?
Moment.jsが最強ということが分かったと思います。

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

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

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/04/26 17:27

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

    キャンセル

  • 2018/04/26 17:31

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

    キャンセル

  • 2018/04/26 18:59

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

    キャンセル

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

  • ただいまの回答率 90.84%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る

  • JavaScript

    14849questions

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

  • jQuery

    6169questions

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

閲覧数の多いJavaScriptの質問