JavaScript
 Computer >> コンピューター >  >> プログラミング >> JavaScript

【JavaScript入門】Dateオブジェクトで今日からn日後の曜日を求める方法

課題の概要

JavaScriptで、数値 n を唯一の引数として受け取る関数を作成することを考えます。

この関数は、まず Date オブジェクトを使って今日の曜日を取得し、n日後が何曜日になるかを返します。

具体例

今日が月曜日で n = 2 の場合、出力は次のようになります。

Wednesday

サンプルコード

const num = 15;

const findNthDay = num => {
  // getDay() の戻り値(0:日曜 〜 6:土曜)に対応する配列
  const weekday = [
    'Sunday',
    'Monday',
    'Tuesday',
    'Wednesday',
    'Thursday',
    'Friday',
    'Saturday'
  ];

  const today = new Date().getDay();
  const daysFromNow = ((num % 7) + 7) % 7; // 負の数にも対応

  return weekday[(today + daysFromNow) % 7];
};

console.log(findNthDay(num));

実行結果

コンソールには以下のように出力されます。

Friday

コードのポイント

  • new Date().getDay() は、今日の曜日を 0(日曜)〜 6(土曜) の整数で返します。配列の先頭を 'Sunday' にしておくことで、getDay() の戻り値とインデックスをそのまま対応させられます。
  • num % 7 により、n日後を「1週間以内の移動量」に置き換えています。曜日は7日周期で繰り返すため、たとえば 15 日後は 2 日後と同じ曜日になります。
  • ((num % 7) + 7) % 7 としているのは、n に負の値が渡された場合(n日前を求めたいケース)でも正しく計算できるようにするためです。
  • 最後に、今日の曜日のインデックスへ移動量を加算し、7 で割った余りを配列の添字として使うことで、週をまたぐ場合も正しい曜日を取得できます。

応用:日本語の曜日名で表示したい場合

配列の要素を書き換えるだけで、日本語の曜日名を返すことも可能です。

const weekdayJp = ['日', '月', '火', '水', '木', '金', '土'];
// weekday を weekdayJp に置き換えるだけでOK
  1. JavaScriptで日付の「日」を設定する方法|setDate()の使い方を解説

    JavaScriptでは、DateオブジェクトのsetDate()メソッドを使うことで、日付の「日」(1〜31)を設定・変更できます。この記事では、実際のコード例と実行結果をもとに、setDate()の基本的な使い方をわかりやすく解説します。 setDate()メソッドとは setDate()は、Dateオブジェクトの「日」の値だけを変更するためのメソッドです。年や月はそのままに、日にちだけを差し替えたい場合に便利です。引数には1〜31の整数を指定しますが、範囲外の値を渡してもエラーにはならず、自動的に月をまたいだ日付へと調整されます。また、このメソッドは元のDateオブジェクト自体を書き換え

  2. JavaScriptで配列要素をそのインデックスでべき乗した値に変換する方法

    問題 数値の配列を受け取るJavaScript関数を作成する必要があります。この関数は、入力配列の各要素を、その要素の位置を示す0始まりのインデックスでべき乗し、新しい配列へと変換します。そして最終的に、この新しい配列を返します。 例えば、インデックス0にある要素は0乗(常に1)、インデックス3にある要素は3乗、というように各要素が処理されます。 実装のポイント ループで配列を走査しながら、各要素とそのインデックスを同時に取得する Math.pow() を使って「要素 ^ インデックス」を計算する 計算結果を結果配列の同じ位置に格納する なお、モダンなJavaScriptでは Math