こうこく
作 ▸
改 ▸

JavaScriptでISO8601形式の日付を扱う

ブラウザでもNode.jsでも同じです

もくじ

Date → ISO8601

Date 型の toISOString() を使う

UTC
const dt = new Date(Date.UTC(1999, 6, 31));
const isoStr = dt.toISOString();

console.log(isoStr);  // 1999-07-31T00:00:00.000Z
日本標準時
const dt = new Date(Date.UTC(1999, 6, 31));
const jdt = new Date(dt.getTime() + 9 * 60 * 60 * 1000);  // 9時間ずらす
const isoStr = jdt.toISOString().split('Z')[0] + '+09:00';

console.log(isoStr);  // 1999-07-31T09:00:00.000+09:00

ただし秒までしか要らない場合、自力でフォーマットする必要がある。

秒まで (UTC)
const toISOStringSec = (dt) => {
	const pad = (val, len) => {
		let p = '';
		for (let i = 0; i < len; ++i) {
			p += '0';
		}
		return (p + String(val)).slice(-1 * len);
	};
	const year = dt.getUTCFullYear();
	const month = dt.getUTCMonth() + 1;
	const days = dt.getUTCDate();
	const hours = dt.getUTCHours();
	const minutes = dt.getUTCMinutes();
	const seconds = dt.getUTCSeconds();
	return `${year}-${pad(month, 2)}-${pad(days, 2)}T${pad(hours, 2)}:${pad(minutes, 2)}:${pad(seconds, 2)}Z`;
};

const dt = new Date(Date.UTC(1999, 6, 31));
const isoStr = toISOStringSec(dt);

console.log(isoStr);  // 1999-07-31T00:00:00Z

ISO8601 → Date

Date.parse() を使う

UTCから
const ts = Date.parse('1999-07-31T00:00:00.000Z');
console.log(ts);  // 933379200000
const dt = new Date(ts);
日本標準時から
const ts = Date.parse('1999-07-31T09:00:00.000+09:00');
console.log(ts);  // 933379200000
const dt = new Date(ts);

こちらはミリ秒がついててもついてなくても変換できる

ミリ秒無し
const ts = Date.parse('1999-07-31T00:00:00Z');
console.log(ts);  // 933379200000
const dt = new Date(ts);
この記事に何かあればこちらまで (非公開)