JavaScript

JavaScript's Date object is a built-in object for obtaining, setting, and manipulating dates and times.

Date [object]

 JavaScriptの Dateオブジェクトは、日時の操作や計算を行うための組み込みオブジェクトです。これにより、現在の日時の取得、特定の日時の設定、日時の加減算、フォーマットなど、多様な日時関連の機能を利用できます。

基本的な生成方法

現在の日時を取得

JavaScript

const now = new Date();

 new Date()を呼び出すと、現在の日時を表すDateオブジェクトが生成されます。

HTML

<div id="dateArea"></div>
<script>
	<!-- JavaScript code here -->
</script>

JavaScript

// 現在の日時を取得
const now = new Date();

// HTML上の<div>要素に表示
document.getElementById('dateArea').textContent = now.toString();

 Dateオブジェクトは、ユーザーのデバイス(端末)のローカルマシン時間を参照して日時を扱います。ブラウザ上で new Date()を実行すると、その端末が持つ現在の時刻とタイムゾーン情報を基にオブジェクトが生成されます。したがって、ユーザーのPCやスマホの時計がズレていれば、生成される日時も実際の時刻とは異なる値になる可能性があります。

特定の日時を設定

タイムスタンプ(ミリ秒)を指定

HTML

<div id="dateArea2"></div>
<script>
	<!-- JavaScript code here -->
</script>

JavaScript

const date = new Date(1672531200000); // 2023年1月1日

// HTML上の<div>要素に表示
document.getElementById('dateArea2').textContent = date.toString();

日時文字列を指定

JavaScript

const date = new Date('2023-01-01T00:00:00');

年、月、日、時、分、秒、ミリ秒を個別に指定

JavaScript

const date = new Date(2023, 0, 1, 0, 0, 0, 0); // 月は0から始まる

日時の取得

 Dateオブジェクトから各要素を取得するメソッドがあります。

年を取得

JavaScript

const year = date.getFullYear();
現在の日時:
年:

HTML

<dl>
	<dt>現在の日時:</dt>
	<dd id="dateNow"></dd>
	<dt>年:</dt>
	<dd id="dateYear"></dd>
</dl>
<script>
	<!-- JavaScript code here -->
</script>

JavaScript

const date = new Date();
const year = date.getFullYear();

// HTML上の<div>要素に表示
document.getElementById('dateNow').textContent = date.toString();
document.getElementById('dateYear').textContent = year.toString();

月を取得(0から11)

JavaScript

const month = date.getMonth();
現在の日時:
月:

HTML

<dl>
	<dt>現在の日時:</dt>
	<dd id="dateNow2"></dd>
	<dt>月:</dt>
	<dd id="dateMonth"></dd>
</dl>
<script>
	<!-- JavaScript code here -->
</script>

JavaScript

const date = new Date();
// 月は0から11で表されるので「+1」しています。
const month = date.getMonth() + 1;

// HTML上の<div>要素に表示
document.getElementById('dateNow2').textContent = date.toString();
document.getElementById('dateMonth').textContent = month.toString();

日を取得

JavaScript

const day = date.getDate();
日:

曜日を取得(0から6、日曜が0)

JavaScript

const dayOfWeek = date.getDay();
曜日:

時、分、秒、ミリ秒を取得

JavaScript

const hours = date.getHours();
const minutes = date.getMinutes();
const seconds = date.getSeconds();
const milliseconds = date.getMilliseconds();
時:
分:
秒:
ミリ秒:

タイムスタンプを取得(1970年1月1日からのミリ秒)

JavaScript

const timestamp = date.getTime();
タイムスタンプ:

日時の設定

 各要素を設定するメソッドも用意されています。

年を設定

JavaScript

date.setFullYear(2024);

月を設定

JavaScript

date.setMonth(5); // 6月

日を設定

JavaScript

date.setDate(15);

他の要素も同様に設定可能

JavaScript

date.setHours(12);
date.setMinutes(30);
date.setSeconds(45);
date.setMilliseconds(500);

日時の計算

 日時の加減算は、タイムスタンプを用いるか、Dateオブジェクトのメソッドを利用します。

1日加算する

JavaScript

date.setDate(date.getDate() + 1);

タイムスタンプを利用して1時間減算する

JavaScript

date.setTime(date.getTime() - 3600000); // 1時間は3600000ミリ秒

日時の比較

 Dateオブジェクトは直接比較できます。

JavaScript

if (date1 > date2) {
	console.log('date1はdate2より後の日時です');
}

日時のフォーマット

 日時を文字列として表示するためのメソッドがあります。

toString()

JavaScript

const str = date.toString();

toISOString()

JavaScript

const isoStr = date.toISOString();

toLocaleString()

JavaScript

const localStr = date.toLocaleString('ja-JP');

カスタムフォーマット

 自前でフォーマットする場合、各要素を組み合わせます。

JavaScript

const formattedDate = `${date.getFullYear()}-${date.getMonth() + 1}-${date.getDate()}`;

静的メソッド

Date.now()

 現在のタイムスタンプを取得します。

JavaScript

const timestamp = Date.now();

Date.parse()

 日時文字列を解析してタイムスタンプを返します。

JavaScript

const timestamp = Date.parse('2023-01-01T00:00:00');

Date.UTC()

 指定された日時のUTCタイムスタンプを返します。

JavaScript

const utcTimestamp = Date.UTC(2023, 0, 1);

タイムゾーンの扱い

 Dateオブジェクトは内部的に UTCで保持され、表示や取得の際にローカルタイムゾーンが適用されます。UTCで日時を取得・設定するメソッドも提供されています。

UTCの日時を取得

JavaScript

const utcHours = date.getUTCHours();

UTCの日時を設定

JavaScript

date.setUTCFullYear(2024);

注意点

月のインデックス
月は0から始まるため、1月は0、12月は11となります。
うるう年や月末日を自動調整
日時を設定する際に範囲外の値を指定すると、自動的に調整されます。

JavaScript

const date = new Date(2023, 0, 32); // 2023年2月1日になる

便利なライブラリ

 複雑な日時操作や国際化対応が必要な場合、以下のライブラリが役立ちます。

Moment.js
使いやすいが、サイズが大きく最近は非推奨。
Day.js
Moment.jsと互換性があり、サイズが小さい。
date-fns
関数型で軽量、高速。
Luxon
Moment.jsの開発者が手掛けた次世代ライブラリ。

Sample

曜日の取得

JavaScript

function getWeekday(date) {
	const weekdays = ['日', '月', '火', '水', '木', '金', '土'];
	return weekdays[date.getDay()];
}

const date = new Date(2023, 0, 1);
console.log(getWeekday(date)); // "日"