もし……

[重要] これは古いバージョンです。現用のものはこちらです。

基本

現在の年を調べる方法を復習しましょう。

<p>
<script type="text/javascript">
  var now = new Date();
  var Y = now.getFullYear();
  document.write("今年は " + Y + "年です");
</script>
</p>

getFullYear() という関数はJavaScriptに比較的最近加えられたもので,古いブラウザでは使えません。古いブラウザで使えるのは getYear() という関数です。

<p>
<script type="text/javascript">
  var now = new Date();
  var Y = now.getYear();
  document.write("今年は " + Y + "年です");
</script>
</p>

この getYear() という関数は,IEでは紀元0年からの年,FirefoxなどECMAscript系のブラウザでは紀元1900年からの年を返します。1900年代ではどちらでもよかったのですが,2000年代になると後者の出力ではまずくなります。いわゆる2000年問題ですね。

そこで,getYear() の返す値が1900未満であれば1900を加える必要があります。

<p>
<script type="text/javascript">
  var now = new Date();
  var Y = now.getYear();
  if (Y < 1900) Y += 1900;
  document.write("今年は " + Y + "年です");
</script>
</p>

Y += 1900Y = Y + 1900 と書いても同じことです。

応用

新しいブラウザでは getFullYear() を使えば4桁の年が得られます。

getFullYear() が使えるかどうかも if で調べられます。

<p>
<script type="text/javascript">
  var now = new Date();
  var Y;
  if (now.getFullYear) {
    Y = now.getFullYear();
  } else {
    Y = now.getYear();
    if (Y < 1900) Y += 1900;
  }
  document.write("今年は" + Y + "年です");
</script>
</p>

このように if (now.getFullYear)nowgetFullYear() があるかどうか調べられます。 もしなければ else 以下に飛びます。

逆に「もし getFullYear() がなければ……」という判断をする場合は if (!now.getFullYear) とします。 ! は not の意味です。

<p>
<script type="text/javascript">
  var now = new Date();
  var Y;
  if (!now.getFullYear) {
    Y = now.getYear();
    if (Y < 1900) Y += 1900;
  } else {
    Y = now.getFullYear();
  }
  document.write("今年は" + Y + "年です");
</script>
</p>

さらに細かいこと

時間がわからない場合も含めて条件判断してみます。

<p>
<script type="text/javascript">
  var now = new Date();
  var Y;
  if (!now.getFullYear) {
    Y = now.getYear();
    if (Y && Y < 1900) Y += 1900;
  } else {
    Y = now.getFullYear();
  }
  if (Y) {
    document.write("今年は" + Y + "年です");
  } else {
    document.write("今年は何年かわかりません");
  }
</script>
</p>

Last modified: