@silversink8888
Revisions
Report this question
Subscribe question
Help us understand the problem. What is going on with this question?
Q&A
Closed

JavaScript で任意の週の開始日と終了日を取得したい

JavaScript の関数で引数に、年、月、週番号で
その週の開始日と終了日の関数を作っています。

下記の関数をあるサイトで見つけたのですが
分からない部分があります。

function getStartDsyOfMonth(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 }
}

の 「(day ? 1 - day : -6)」の部分は何をやっているのでしょうか?
どなたか解説お願いします。

start.setDate(start.getDate() + (day ? 1 - day : -6));
0
1
Answer
Report this answer

三項演算子ですね。

diffという変数の有無を除けば、以下コードと同等です。

if (day) {
  const diff = 1 - day;
} else {
  const diff = -6;
}
start.setDate(start.getDate() + diff);

jsでは日曜が0なので、月〜土の場合はif(day)、日の場合はelseになります。
つまり計算結果は直前の月曜日の日付になります。

2
@rf_p様
返信が遅れましてすみません。
ご回答有難うございます。丁寧な解説ありがとうございました
お役に立てたようで何よりです!
View the remaining 1 comments.
Help us understand the problem. What is going on with this answer?
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login