導入:なぜ「UTC」の曜日を知る必要があるのか?
JavaScriptで日付を扱う際、何気なく「new Date().getDay()」を使っていませんか?実は、これには大きな落とし穴があります。getDay()メソッドは実行環境(ブラウザやサーバー)の「ローカルタイムゾーン」に依存するため、サーバーの場所が変わると結果が変わってしまうリスクがあるのです。
「世界中どこからアクセスしても、同じ基準(協定世界時:UTC)で曜日を判定したい」という場面では、今回解説する「Date.prototype.getUTCDay」が非常に重要です。このメソッドを使えば、タイムゾーンに左右されない安定した日付ロジックを構築できます。
基礎知識:UTCと曜日番号の仕組み
まず「UTC(協定世界時)」とは、世界共通の標準時間のことです。これに対して「ローカルタイム」は、そのPCやサーバーが設定されている地域(日本ならJSTなど)の時間です。
「getUTCDay」メソッドは、UTC基準でその日付の曜日を「0〜6の数値」で返します。
・0:日曜日
・1:月曜日
・2:火曜日
・3:水曜日
・4:木曜日
・5:金曜日
・6:土曜日
この番号を配列と組み合わせるのが、プログラミングにおける曜日の表示テクニックです。
実装:getUTCDayを使った曜日の取得
実装は非常にシンプルです。Dateオブジェクトを作成し、メソッドを呼び出すだけです。注意点として、getUTCDayは「UTC基準である」という点を忘れないでください。もし日本時間(JST)の曜日が欲しい場合は、単純にgetDay()を使うか、タイムゾーンのオフセットを考慮する必要があります。
サンプルプログラム:曜日の日本語表示
以下のコードは、現在の日時をUTCで取得し、日本語の曜日を表示する例です。そのままコピーしてブラウザのコンソールで実行してみてください。
// 現在の日時を取得
const now = new Date();
// UTC基準で曜日番号(0-6)を取得
const utcDayNumber = now.getUTCDay();
// 曜日名を配列で定義(0が日曜日なので、インデックスを合わせます)
const days = ["日", "月", "火", "水", "木", "金", "土"];
// 結果を出力
console.log("現在のUTC曜日番号: " + utcDayNumber);
console.log("現在のUTC曜日(日本語): " + days[utcDayNumber] + "曜日");
応用・注意点:現場で陥りやすいバグ
現場でよくある失敗は、「ローカルタイム」と「UTC」を混同することです。
1. タイムゾーンのズレ
日本時間(UTC+9)の深夜に実行した場合、getUTCDayの結果は「前日」の曜日になる可能性があります。ユーザーに表示するカレンダーを作る際は、ユーザーのローカル時間で表示すべきか、システム上の判定としてUTCが必要なのかを明確に区別してください。
2. getMonthやgetDateとの併用
getUTCDayを使うのであれば、日付や月を取得する際もgetUTCDateやgetUTCMonthを使用するように統一しましょう。一部だけローカル、一部だけUTCという混在コードは、デバッグが困難なバグの温床になります。
正確なデータ管理が求められるWeb開発において、タイムゾーンを意識した実装はプロの第一歩です。ぜひ活用してみてください。