🗓️
TypeScriptにおける日付フォーマットの個人的ベストプラクティス
はじめに
日付フォーマットって、こんな悩みありませんか?
-
MM
とmm
のどちらが月でどちらが分だっけ... - フォーマットのためだけにライブラリを導入すべきか悩む
私はTypeScriptの場合、ライブラリを使わず、日付フォーマット用の独自メソッドを作っています。
JSDocを活用することで、↓のようにVSCodeのインテリセンスでフォーマットの一覧と使い方を表示できます
こうすることで、フォーマット指定のミスを防ぎつつ、チーム内での表示形式も統一できます。
実装
さきほどのgifを実現している実装は次のようになります。
dateUtil.ts
type SupportedDateFormat =
'YYYY/MM/DD' |
'YYYY年M月D日(曜)'|
'M/D(曜)' |
'YYYY/MM/DD HH:mm:ss';
/**
* 日付を YYYY/MM/DD 形式の文字列に変換します
* @param date 変換対象の日付
* @param format YYYY/MM/DD
* @returns {string} 例: 2024/04/08
*/
export function formatDate(date: Date, format: 'YYYY/MM/DD'): string;
/**
* 日付を YYYY年M月D日(曜) 形式の文字列に変換します
* @param date 変換対象の日付
* @param format YYYY年M月D日(曜)
* @returns {string} 例: 2024年4月8日(月)
*/
export function formatDate(date: Date, format: 'YYYY年M月D日(曜)'): string;
/**
* 日付を M/D 形式の文字列に変換します
* @param date 変換対象の日付
* @param format M/D(曜)
* @returns {string} 例: 4/8(月)
*/
export function formatDate(date: Date, format: 'M/D(曜)'): string;
/**
* 日時を YYYY/MM/DD HH:mm:ss 形式の文字列に変換します
* @param date 変換対象の日時
* @param format YYYY/MM/DD HH:mm:ss
* @returns {string} 例: 2024/04/08 09:05:45
*/
export function formatDate(date: Date, format: 'YYYY/MM/DD HH:mm:ss'): string;
// 実装
export function formatDate(date: Date, format: SupportedDateFormat): string {
switch (format) {
case 'YYYY/MM/DD':
return date.toLocaleDateString('ja-JP', {
year: 'numeric',
month: '2-digit',
day: '2-digit'
});
case 'YYYY年M月D日(曜)':
return date.toLocaleDateString('ja-JP', {
year: 'numeric',
month: 'long',
day: 'numeric',
weekday: 'short'
});
case 'M/D(曜)':
return date.toLocaleDateString('ja-JP', {
month: 'numeric',
day: 'numeric',
weekday: 'short'
});
case 'YYYY/MM/DD HH:mm:ss':
return date.toLocaleDateString('ja-JP', {
year: 'numeric',
month: '2-digit',
day: '2-digit',
hour: '2-digit',
minute: '2-digit',
second: '2-digit'
});
default:
throw new Error(`Unsupported format: ${format}`);
}
}
main.ts
import { formatDate } from './dateUtil.ts'
const text = formatDate(new Date(), 'YYYY年M月D日(曜)');
console.log(text); // 2024年11月9日(土)
- 日付フォーマットはJavaScript標準のtoLocaleDateStringを使っています。
- 関数のオーバーロードを使うことで、フォーマットごとの説明をIDE上で表示させています。
- フォーマット文字列はdayjsを参考にしています。
プレイグラウンド
↓で実際にVSCodeのインテリセンスが動くのでぜひ試してみて下さい。
長所短所
この方式の長所・短所を↓にまとめてみました。
個人的には1つのアプリで使うフォーマットが数パターンに収まる場合、長所の方が勝つんじゃないかと考えています。
長所
- IDEの補完が便利
- アプリケーションで扱うフォーマットを統一できる
- フォーマット文字列の指定ミスが防げる
- 日付ライブラリを入れないことでビルドサイズを抑えられる
短所
- コードが長い
- 新しいフォーマットを使う時にメソッドを定義するのが面倒
-
toLocaleDateString
の使い方が難しい - 日付ライブラリを既に導入している場合、逆にややこしい
- ただ日付ライブラリのフォーマットを独自メソッド内で使って、他の場所でのフォーマットは独自メソッドを使うようにするのもあり
使いそうなフォーマットの実装(コピペ用)
↑の短所にもあるのように、toLocaleDateString
を使った実装は癖があって、新しいフォーマットを定義するのは面倒です。
そのため、使いそうな日付フォーマットの実装を↓の dateUtil.ts (コピペ用) に書いておきました。
国内向けの日付フォーマットとしては、だいたい網羅しているんじゃないでしょうか?
52フォーマットあって、元号にも対応しています。
コピペして、要らないフォーマットは削除した上で使ってみてください。
dateUtil.ts (コピペ用)
dateUtil.ts
type SupportedDateFormat =
'YYYY-MM-DD' |
'YYYY/MM/DD' |
'YYYY/MM/DD(ddd)' |
'YYYY/MM/DD(曜)' |
'YYYY年M月D日'|
'YYYY年M月D日(曜)'|
'(元号)Y年M月D日' |
'(元号)Y年M月D日(曜)' |
'(GENGOU)Y.M.D' |
'(GENGOU)Y.MM.DD' |
'MM/DD' |
'MM/DD(ddd)' |
'MM/DD(曜)' |
'M/D' |
'M/D(ddd)' |
'M/D(曜)' |
'M月D日'|
'M月D日(曜)'|
'HH:mm:ss.SSS' |
'HH:mm:ss' |
'HH:mm' |
'HH時mm分ss秒'|
'HH時mm分'|
'H時m分'|
'HH時'|
'H時'|
'ISO8601' |
'YYYY-MM-DDTHH:mm:ss.SSSZ' |
'YYYY-MM-DD HH:mm:ss' |
'YYYY/MM/DD HH:mm:ss' |
'YYYY/MM/DD HH:mm' |
'YYYY年MM月DD日HH時mm分ss秒'|
'YYYY年M月D日H時m分'|
'YYYY年M月D日H時'|
'(元号)Y年M月D日H時m分'|
'(元号)Y年M月D日H時'|
'MM/DD HH:mm:ss' |
'MM/DD HH:mm' |
'MM月DD日HH時mm分ss秒'|
'M月D日H時m分'|
'M月D日H時'|
'YYYY' |
'MM' |
'M' |
'DD' |
'D' |
'HH' |
'H' |
'mm' |
'm' |
'ss' |
's';
/**
* 日付を YYYY-MM-DD 形式の文字列に変換します
* @param date 変換対象の日付
* @param format YYYY-MM-DD
* @returns {string} 例: 2024-04-08
*/
export function formatDate(date: Date, format: 'YYYY-MM-DD'): string;
/**
* 日付を YYYY/MM/DD 形式の文字列に変換します
* @param date 変換対象の日付
* @param format YYYY/MM/DD
* @returns {string} 例: 2024/04/08
*/
export function formatDate(date: Date, format: 'YYYY/MM/DD'): string;
/**
* 日付を YYYY/MM/DD(ddd) 形式の文字列に変換します
* @param date 変換対象の日付
* @param format YYYY/MM/DD(ddd)
* @returns {string} 例: 2024/04/08(Mon)
*/
export function formatDate(date: Date, format: 'YYYY/MM/DD(ddd)'): string;
/**
* 日付を YYYY/MM/DD(曜) 形式の文字列に変換します
* @param date 変換対象の日付
* @param format YYYY/MM/DD(曜)
* @returns {string} 例: 2024/04/08(月)
*/
export function formatDate(date: Date, format: 'YYYY/MM/DD(曜)'): string;
/**
* 日付を YYYY年M月D日 形式の文字列に変換します
* @param date 変換対象の日付
* @param format YYYY年M月D日
* @returns {string} 例: 2024年4月8日
*/
export function formatDate(date: Date, format: 'YYYY年M月D日'): string;
/**
* 日付を YYYY年M月D日(曜) 形式の文字列に変換します
* @param date 変換対象の日付
* @param format YYYY年M月D日(曜)
* @returns {string} 例: 2024年4月8日(月)
*/
export function formatDate(date: Date, format: 'YYYY年M月D日(曜)'): string;
/**
* 日付を (元号)Y年M月D日 形式の文字列に変換します
* @param date 変換対象の日付
* @param format (元号)Y年M月D日
* @returns {string} 例: 令和6年4月8日
*/
export function formatDate(date: Date, format: '(元号)Y年M月D日'): string;
/**
* 日付を (元号)Y年M月D日(曜) 形式の文字列に変換します
* @param date 変換対象の日付
* @param format (元号)Y年M月D日(曜)
* @returns {string} 例: 令和6年4月8日(月)
*/
export function formatDate(date: Date, format: '(元号)Y年M月D日(曜)'): string;
/**
* 日付を (GENGOU)Y.M.D 形式の文字列に変換します
* @param date 変換対象の日付
* @param format (GENGOU)Y.M.D
* @returns {string} 例: R6.4.8
*/
export function formatDate(date: Date, format: '(GENGOU)Y.M.D'): string;
/**
* 日付を (GENGOU)Y.MM.DD 形式の文字列に変換します
* @param date 変換対象の日付
* @param format (GENGOU)Y.MM.DD
* @returns {string} 例: R6.04.08
*/
export function formatDate(date: Date, format: '(GENGOU)Y.MM.DD'): string;
/**
* 日付を MM/DD 形式の文字列に変換します
* @param date 変換対象の日付
* @param format MM/DD
* @returns {string} 例: 04/08
*/
export function formatDate(date: Date, format: 'MM/DD'): string;
/**
* 日付を MM/DD(ddd) 形式の文字列に変換します
* @param date 変換対象の日付
* @param format MM/DD(ddd)
* @returns {string} 例: 04/08(Mon)
*/
export function formatDate(date: Date, format: 'MM/DD(ddd)'): string;
/**
* 日付を MM/DD 形式の文字列に変換します
* @param date 変換対象の日付
* @param format MM/DD(曜)
* @returns {string} 例: 04/08(月)
*/
export function formatDate(date: Date, format: 'MM/DD(曜)'): string;
/**
* 日付を M/D 形式の文字列に変換します
* @param date 変換対象の日付
* @param format M/D
* @returns {string} 例: 4/8
*/
export function formatDate(date: Date, format: 'M/D'): string;
/**
* 日付を M/D(ddd) 形式の文字列に変換します
* @param date 変換対象の日付
* @param format M/D(ddd)
* @returns {string} 例: 04/08(Mon)
*/
export function formatDate(date: Date, format: 'M/D(ddd)'): string;
/**
* 日付を M/D 形式の文字列に変換します
* @param date 変換対象の日付
* @param format M/D(曜)
* @returns {string} 例: 4/8(月)
*/
export function formatDate(date: Date, format: 'M/D(曜)'): string;
/**
* 日付を M月D日 形式の文字列に変換します
* @param date 変換対象の日付
* @param format M月D日
* @returns {string} 例: 4月8日
*/
export function formatDate(date: Date, format: 'M月D日'): string;
/**
* 日付を M月D日 形式の文字列に変換します
* @param date 変換対象の日付
* @param format M月D日(曜)
* @returns {string} 例: 4月8日(月)
*/
export function formatDate(date: Date, format: 'M月D日(曜)'): string;
/**
* 時刻を HH:mm:ss.SSS 形式の文字列に変換します
* @param date 変換対象の日時
* @param format HH:mm:ss.SSS
* @returns {string} 例: 09:05:45.123
*/
export function formatDate(date: Date, format: 'HH:mm:ss.SSS'): string;
/**
* 時刻を HH:mm:ss 形式の文字列に変換します
* @param date 変換対象の日時
* @param format HH:mm:ss
* @returns {string} 例: 09:05:45
*/
export function formatDate(date: Date, format: 'HH:mm:ss'): string;
/**
* 時刻を HH:mm 形式の文字列に変換します
* @param date 変換対象の日時
* @param format HH:mm
* @returns {string} 例: 09:05
*/
export function formatDate(date: Date, format: 'HH:mm'): string;
/**
* 時刻を HH時mm分ss秒 形式の文字列に変換します
* @param date 変換対象の日時
* @param format HH時mm分ss秒
* @returns {string} 例: 09時05分05秒
*/
export function formatDate(date: Date, format: 'HH時mm分ss秒'): string;
/**
* 時刻を HH時mm分 形式の文字列に変換します
* @param date 変換対象の日時
* @param format HH時mm分
* @returns {string} 例: 09時05分
*/
export function formatDate(date: Date, format: 'HH時mm分'): string;
/**
* 時刻を H時m分 形式の文字列に変換します
* @param date 変換対象の日時
* @param format H時m分
* @returns {string} 例: 9時5分
*/
export function formatDate(date: Date, format: 'H時m分'): string;
/**
* 時刻を HH時 形式の文字列に変換します
* @param date 変換対象の日時
* @param format HH時
* @returns {string} 例: 09時
*/
export function formatDate(date: Date, format: 'HH時'): string;
/**
* 時刻を H時 形式の文字列に変換します
* @param date 変換対象の日時
* @param format H時
* @returns {string} 例: 9時
*/
export function formatDate(date: Date, format: 'H時'): string;
/**
* 日時を YYYY-MM-DDTHH:mm:ss.SSSZ 形式の文字列に変換します(ISO 8601)
* @param date 変換対象の日時
* @param format ISO8601
* @returns {string} 例: 2024-04-08T05:30:45.123Z
*/
export function formatDate(date: Date, format: 'ISO8601'): string;
/**
* 日時を YYYY-MM-DDTHH:mm:ss.SSSZ 形式の文字列に変換します(ISO 8601)
* @param date 変換対象の日時
* @param format YYYY-MM-DDTHH:mm:ss.SSSZ
* @returns {string} 例: 2024-04-08T05:30:45.123Z
*/
export function formatDate(date: Date, format: 'YYYY-MM-DDTHH:mm:ss.SSSZ'): string;
/**
* 日時を YYYY-MM-DD HH:mm:ss 形式の文字列に変換します
* @param date 変換対象の日時
* @param format YYYY-MM-DD HH:mm:ss
* @returns {string} 例: 2024-04-08 09:05:45.123
*/
export function formatDate(date: Date, format: 'YYYY-MM-DD HH:mm:ss'): string;
/**
* 日時を YYYY/MM/DD HH:mm:ss 形式の文字列に変換します
* @param date 変換対象の日時
* @param format YYYY/MM/DD HH:mm:ss
* @returns {string} 例: 2024/04/08 09:05:45
*/
export function formatDate(date: Date, format: 'YYYY/MM/DD HH:mm:ss'): string;
/**
* 日時を YYYY/MM/DD HH:mm 形式の文字列に変換します
* @param date 変換対象の日時
* @param format YYYY/MM/DD HH:mm
* @returns {string} 例: 2024/04/08 09:05
*/
export function formatDate(date: Date, format: 'YYYY/MM/DD HH:mm'): string;
/**
* 日時を YYYY年MM月DD日HH時mm分ss秒 形式の文字列に変換します
* @param date 変換対象の日時
* @param format YYYY年MM月DD日HH時mm分ss秒
* @returns {string} 例: 2024年04月08日09時09分08秒
*/
export function formatDate(date: Date, format: 'YYYY年MM月DD日HH時mm分ss秒'): string;
/**
* 日時を YYYY年M月D日H時m分 形式の文字列に変換します
* @param date 変換対象の日時
* @param format YYYY年M月D日H時m分
* @returns {string} 例: 2024年4月8日14時30分
*/
export function formatDate(date: Date, format: 'YYYY年M月D日H時m分'): string;
/**
* 日時を YYYY年M月D日H時 形式の文字列に変換します
* @param date 変換対象の日時
* @param format YYYY年M月D日H時
* @returns {string} 例: 2024年4月8日14時
*/
export function formatDate(date: Date, format: 'YYYY年M月D日H時'): string;
/**
* 日時を YYYY年M月D日HH時mm分ss秒 形式の文字列に変換します
* @param date 変換対象の日時
* @param format YYYY年M月D日HH時mm分ss秒
* @returns {string} 例: 2024年4月8日09時05分05秒
*/
export function formatDate(date: Date, format: 'YYYY年MM月DD日HH時mm分ss秒'): string;
/**
* 日時を YYYY年M月D日H時m分 形式の文字列に変換します
* @param date 変換対象の日時
* @param format YYYY年M月D日H時m分
* @returns {string} 例: 2024年4月8日9時5分
*/
export function formatDate(date: Date, format: 'YYYY年M月D日H時m分'): string;
/**
* 日時を YYYY年M月D日H時 形式の文字列に変換します
* @param date 変換対象の日時
* @param format YYYY年M月D日H時
* @returns {string} 例: 2024年4月8日9時
*/
export function formatDate(date: Date, format: 'YYYY年M月D日H時'): string;
/**
* 日時を (元号)Y年M月D日H時m分 形式の文字列に変換します
* @param date 変換対象の日時
* @param format (元号)Y年M月D日H時m分
* @returns {string} 例: 令和6年4月8日9時30分
*/
export function formatDate(date: Date, format: '(元号)Y年M月D日H時m分'): string;
/**
* 日時を (元号)Y年M月D日H時 形式の文字列に変換します
* @param date 変換対象の日時
* @param format (元号)Y年M月D日H時
* @returns {string} 例: 令和6年4月8日9時
*/
export function formatDate(date: Date, format: '(元号)Y年M月D日H時'): string;
/**
* 日時を MM/DD HH:mm:ss 形式の文字列に変換します
* @param date 変換対象の日時
* @param format MM/DD HH:mm:ss
* @returns {string} 例: 04/08 09:05:45
*/
export function formatDate(date: Date, format: 'MM/DD HH:mm:ss'): string;
/**
* 日時を MM/DD HH:mm 形式の文字列に変換します
* @param date 変換対象の日時
* @param format MM/DD HH:mm
* @returns {string} 例: 04/08 09:05
*/
export function formatDate(date: Date, format: 'MM/DD HH:mm'): string;
/**
* 日時を M月D日HH時mm分ss秒 形式の文字列に変換します
* @param date 変換対象の日時
* @param format M月D日HH時mm分ss秒
* @returns {string} 例: 4月8日09時05分05秒
*/
export function formatDate(date: Date, format: 'MM月DD日HH時mm分ss秒'): string;
/**
* 日時を M月D日H時m分 形式の文字列に変換します
* @param date 変換対象の日時
* @param format M月D日H時m分
* @returns {string} 例: 4月8日9時5分
*/
export function formatDate(date: Date, format: 'M月D日H時m分'): string;
/**
* 日時を M月D日H時 形式の文字列に変換します
* @param date 変換対象の日時
* @param format M月D日H時
* @returns {string} 例: 4月8日9時
*/
export function formatDate(date: Date, format: 'M月D日H時'): string;
/**
* 日時から特定の要素を抽出します
* @param date 変換対象の日時
* @param format
* - 'YYYY': 年(4桁)
* - 'MM': 月(2桁)
* - 'M': 月
* - 'DD': 日(2桁)
* - 'D': 日
* - 'HH': 時(2桁)
* - 'H': 時
* - 'mm': 分(2桁)
* - 'm': 分
* - 'ss': 秒(2桁)
* - 's': 秒
* @returns {string} 指定された要素の文字列
*/
export function formatDate(date: Date, format: 'YYYY' | 'MM' | 'M' | 'DD' | 'D' | 'HH' | 'H' | 'mm' | 'm' | 'ss' | 's'): string;
// 実装
export function formatDate(date: Date, format: SupportedDateFormat): string {
switch (format) {
case 'YYYY-MM-DD':
return date.toLocaleDateString('en-CA', {
year: 'numeric',
month: '2-digit',
day: '2-digit'
});
case 'YYYY/MM/DD':
return date.toLocaleDateString('ja-JP', {
year: 'numeric',
month: '2-digit',
day: '2-digit'
});
case 'YYYY/MM/DD(ddd)':
return `${date.toLocaleDateString('ja-JP', {
year: 'numeric',
month: '2-digit',
day: '2-digit'
})}(${date.toLocaleDateString('en-US', { weekday: 'short' })})`;
case 'YYYY/MM/DD(曜)':
return date.toLocaleDateString('ja-JP', {
year: 'numeric',
month: '2-digit',
day: '2-digit',
weekday: 'short'
});
case 'YYYY年M月D日':
return date.toLocaleDateString('ja-JP', {
year: 'numeric',
month: 'long',
day: 'numeric'
});
case 'YYYY年M月D日(曜)':
return date.toLocaleDateString('ja-JP', {
year: 'numeric',
month: 'long',
day: 'numeric',
weekday: 'short'
});
case '(元号)Y年M月D日':
return date.toLocaleDateString('ja-JP-u-ca-japanese', {
year: 'numeric',
month: 'long',
day: 'numeric'
});
case '(元号)Y年M月D日(曜)':
return date.toLocaleDateString('ja-JP-u-ca-japanese', {
year: 'numeric',
month: 'long',
day: 'numeric',
weekday: 'short'
});
case '(GENGOU)Y.M.D':
return date.toLocaleDateString('ja-JP-u-ca-japanese', {
year: 'numeric',
month: 'numeric',
day: 'numeric'
}).replaceAll('/', '.');
case '(GENGOU)Y.MM.DD':
return date.toLocaleDateString('ja-JP-u-ca-japanese', {
year: 'numeric',
month: '2-digit',
day: '2-digit'
}).replaceAll('/', '.');
case 'MM/DD':
return date.toLocaleDateString('ja-JP', {
month: '2-digit',
day: '2-digit',
});
case 'MM/DD(ddd)':
return `${date.toLocaleDateString('ja-JP', {
month: '2-digit',
day: '2-digit'
})}(${date.toLocaleDateString('en-US', { weekday: 'short' })})`;
case 'MM/DD(曜)':
return date.toLocaleDateString('ja-JP', {
month: '2-digit',
day: '2-digit',
weekday: 'short'
});
case 'M/D':
return date.toLocaleDateString('ja-JP', {
month: 'numeric',
day: 'numeric',
});
case 'M/D(ddd)':
return `${date.toLocaleDateString('ja-JP', {
month: 'numeric',
day: 'numeric',
})}(${date.toLocaleDateString('en-US', { weekday: 'short' })})`;
case 'M/D(曜)':
return date.toLocaleDateString('ja-JP', {
month: 'numeric',
day: 'numeric',
weekday: 'short'
});
case 'M月D日':
return date.toLocaleDateString('ja-JP', {
month: 'long',
day: 'numeric'
});
case 'M月D日(曜)':
return date.toLocaleDateString('ja-JP', {
month: 'long',
day: 'numeric',
weekday: 'short'
});
case 'HH:mm:ss.SSS':
return `${
date.toLocaleTimeString('ja-JP', {
hour: '2-digit',
minute: '2-digit',
second: '2-digit',
hour12: false
})
}.${String(date.getMilliseconds()).padStart(3, '0')}`;
case 'HH:mm:ss':
return date.toLocaleTimeString('ja-JP', {
hour: '2-digit',
minute: '2-digit',
second: '2-digit',
hour12: false,
});
case 'HH:mm':
return date.toLocaleTimeString('ja-JP', {
hour: '2-digit',
minute: '2-digit',
hour12: false,
});
case 'HH時mm分ss秒':
return `${
String(date.getHours()).padStart(2, '0')
}時${
String(date.getMinutes()).padStart(2, '0')
}分${
String(date.getSeconds()).padStart(2, '0')
}秒`;
case 'HH時mm分':
return `${
String(date.getHours()).padStart(2, '0')
}時${
String(date.getMinutes()).padStart(2, '0')
}分`;
case 'H時m分':
return `${date.getHours()}時${date.getMinutes()}分`;
case 'HH時':
return `${String(date.getHours()).padStart(2, '0')}時`;
case 'H時':
return `${date.getHours()}時`;
case 'ISO8601':
case 'YYYY-MM-DDTHH:mm:ss.SSSZ':
return date.toISOString();
case 'YYYY-MM-DD HH:mm:ss':
return `${date.toLocaleDateString('en-CA', {
year: 'numeric',
month: '2-digit',
day: '2-digit'
})} ${date.toLocaleTimeString('ja-JP', {
hour: '2-digit',
minute: '2-digit',
second: '2-digit'
})}`;
case 'YYYY/MM/DD HH:mm:ss':
return date.toLocaleDateString('ja-JP', {
year: 'numeric',
month: '2-digit',
day: '2-digit',
hour: '2-digit',
minute: '2-digit',
second: '2-digit'
});
case 'YYYY/MM/DD HH:mm':
return date.toLocaleDateString('ja-JP', {
year: 'numeric',
month: '2-digit',
day: '2-digit',
hour: '2-digit',
minute: '2-digit'
});
case 'YYYY年MM月DD日HH時mm分ss秒':
return `${
date.getFullYear()
}年${
String(date.getMonth() + 1).padStart(2, '0')
}月${
String(date.getDate()).padStart(2, '0')
}日${
String(date.getHours()).padStart(2, '0')
}時${
String(date.getMinutes()).padStart(2, '0')
}分${
String(date.getSeconds()).padStart(2, '0')
}秒`;
case 'YYYY年M月D日H時m分':
return `${
date.toLocaleDateString('ja-JP', {
year: 'numeric',
month: 'long',
day: 'numeric'
})
}${date.getHours()}時${date.getMinutes()}分`;
case 'YYYY年M月D日H時':
return `${
date.toLocaleDateString('ja-JP', {
year: 'numeric',
month: 'long',
day: 'numeric'
})
}${date.getHours()}時`;
case '(元号)Y年M月D日H時m分':
return `${
date.toLocaleDateString('ja-JP-u-ca-japanese', {
year: 'numeric',
month: 'long',
day: 'numeric'
})
}${date.getHours()}時${date.getMinutes()}分`;
case '(元号)Y年M月D日H時':
return `${
date.toLocaleDateString('ja-JP-u-ca-japanese', {
year: 'numeric',
month: 'long',
day: 'numeric'
})
}${date.getHours()}時`;
case 'MM/DD HH:mm:ss':
return date.toLocaleDateString('ja-JP', {
month: '2-digit',
day: '2-digit',
hour: '2-digit',
minute: '2-digit',
second: '2-digit'
});
case 'MM/DD HH:mm':
return date.toLocaleDateString('ja-JP', {
month: '2-digit',
day: '2-digit',
hour: '2-digit',
minute: '2-digit'
});
case 'MM月DD日HH時mm分ss秒':
return `${
String(date.getMonth() + 1).padStart(2, '0')
}月${
String(date.getDate()).padStart(2, '0')
}日${
String(date.getHours()).padStart(2, '0')
}時${
String(date.getMinutes()).padStart(2, '0')
}分${
String(date.getSeconds()).padStart(2, '0')
}秒`;
case 'M月D日H時m分':
return `${
date.toLocaleDateString('ja-JP', {
month: 'long',
day: 'numeric'
})
}${date.getHours()}時${date.getMinutes()}分`;
case 'M月D日H時':
return `${
date.toLocaleDateString('ja-JP', {
month: 'long',
day: 'numeric'
})
}${date.getHours()}時`;
case 'YYYY':
return String(date.getFullYear());
case 'MM':
return String(date.getMonth() + 1).padStart(2, '0');
case 'M':
return String(date.getMonth() + 1);
case 'DD':
return String(date.getDate()).padStart(2, '0');
case 'D':
return String(date.getDate());
case 'HH':
return String(date.getHours()).padStart(2, '0');
case 'H':
return String(date.getHours());
case 'mm':
return String(date.getMinutes()).padStart(2, '0');
case 'm':
return String(date.getMinutes());
case 'ss':
return String(date.getSeconds()).padStart(2, '0');
case 's':
return String(date.getSeconds());
default:
throw new Error(`Unsupported format: ${format}`);
}
}
GitHubにも同様のコードを置いておきました。
Discussion