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

JavaScriptで西暦年から世紀を取得する方法

本記事では、数値または文字列として与えられた西暦年を受け取り、その年が属する世紀を計算して返すJavaScript関数の作成方法を解説します。

期待される動作

作成する関数は、次のように年を渡すと対応する世紀の番号を返します。

f("2000") = 20
f(1999) = 20
f("2002") = 21

2000年と1999年はどちらも20世紀(1901年〜2000年)に属し、2002年は21世紀に属します。世紀の区切りは「1年〜100年=1世紀」「101年〜200年=2世紀」というルールに従うため、単純に年を100で割るだけでは正しく求められない点に注意が必要です。

コード例

const centuryFromYear = year => {
  // 文字列で渡された場合
  if(typeof year == 'string'){
    // 末尾2桁が「00」なら、先頭2桁がそのまま世紀になる
    if(year.toString().slice(-2) == '00'){
      return year.toString().slice(0, 2);
    }else{
      // 100で割って切り捨て、1を加える
      return (Math.floor(+year / 100) + 1).toString();
    };
  }
  // 数値で渡された場合
  else if(typeof year == 'number'){
    return Math.floor((year - 1) / 100) + 1;
  }
  // いずれでもない場合は undefined を返す
  else{
    return undefined;
  };
};

console.log(centuryFromYear("2000"));
console.log(centuryFromYear("2002"));
console.log(centuryFromYear(1999));

実行結果

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

20
21
20

処理のポイント

  • 文字列の場合:まず末尾2桁が「00」かどうかを判定します。末尾が00の年(例:「2000」)は世紀の最終年にあたるため、先頭2桁をそのまま返すだけで正解になります。それ以外の年は、数値に変換して100で割り、小数点以下を切り捨ててから1を加えて世紀を求めます。
  • 数値の場合:Math.floor((year - 1) / 100) + 1 という1つの式だけで計算できます。1を引いてから100で割ることで、「100年は2世紀ではなく1世紀」という区切りを正しく扱えます。
  • その他の型の場合:数値・文字列以外が渡されたときは undefined を返し、不正な入力に備えています。

よりシンプルで安全な書き方

実は、数値用の式 Math.floor((year - 1) / 100) + 1 は、入力を Number() で数値化すれば文字列にもそのまま使えます。

const centuryFromYear = year => {
  const y = Number(year);
  if (Number.isNaN(y)) return undefined;
  return Math.floor((y - 1) / 100) + 1;
};

この書き方には2つのメリットがあります。1つ目は、元のコードの文字列処理(slice(0, 2) を使う方法)が3桁の年(例:900年)で誤った結果を返すという落とし穴を回避できる点です。2つ目は、Number.isNaN() によるチェックにより、数字以外の文字列が渡された場合にも安全に対処できる点です。実務ではこちらの汎用的な実装を推奨します。

  1. JavaScriptにおけるpreventDefault()とreturn falseの違いを徹底解説

    preventDefault()とreturn falseの基本的な違いpreventDefault()は、イベントが発生した際にブラウザのデフォルト動作をキャンセルするメソッドです。例えば、リンクをクリックしたときのページ遷移を防ぎたい場合などに使用します。ただし、イベント自体の伝播(バブリング)は止められず、後続の処理も通常どおり実行されます。一方、return falseは、インラインのイベントハンドラやjQueryなどの環境で使われた場合、デフォルト動作を停止するだけでなく、イベントの伝播も阻止します。また、関数内でreturn falseに到達した時点でそれ以降の処理は実行されず、即

  2. SeleniumでJavaScriptコードの戻り値を取得する方法

    Selenium WebDriverを使用すると、JavaScriptコードの戻り値を取得することができます。SeleniumはexecuteScriptメソッドを利用してJavaScriptコマンドを実行でき、実行したいJavaScriptコマンドはこのメソッドの引数として渡します。 JavaScriptコードから値を返す際にはreturnキーワードを使用します。また、JavaScriptを操作するためには、import org.openqa.selenium.JavascriptExecutorというインポート文を追加する必要がある点にも注意してください。 構文 JavascriptEx