背景
AWS Dynamo DB へデータを入れる際に、以下が必要だった。
自分で実装する道はあるけど・・車輪の再発明なんてしたくないので、公式ドキュメントとかをみてたら、一応みつかったのでその際の備忘録
- テストデータ作成用に、Date().AddHours()
- DynamoDB の Timestamp Sort Key 登録用に、Date/Time を固定長(Zero padding) したい(Date Format)
大切なのは、簡単に検索結果に飛びつかないこと
結論
日付データの加算・減算
データ型の、setHours() 等をそのまま使えばいいだけ。
そう、自分で実装する必要なんてないんです。
とはいえ、AddHours() とかあったほうが分かりやすいし記述も楽なので、その為の再実装はありかな。
const event = new Date('August 19, 1975 23:15:30');
event.setHours(20);
console.log(`original: ${event.toLocaleString()}`);
event.setHours(event.getHours() + 5);
console.log(`add : ${event.toLocaleString()}`);
event.setHours(event.getHours() - 3);
console.log(`sub : ${event.toLocaleString()}`);
以下で、ドキュメント見ながら試しましょう
Date/Time を固定長(Zero padding)
Format を指定してやれば OK
例えば、月の場合は、以下のような options 設定がある
ってことで、基本は "2-digit" に設定してやればいい。
とはいえ、month/day/hour だけかな。
year は 四桁必要だし、minute/second は numeric/2-digit の差が今はなさそう
とはいえ、minute 等を削除すると、表示自体無くなるので、省略は出来ない
const event = new Date(2022,0,2,3,4,5);
console.log(event.toLocaleString());
const options = {
year: 'numeric',
month: '2-digit', // numeric: 一桁/ long|short|narrow: "月"
day: '2-digit', // numeric: 一桁
hour: '2-digit', // numeric: 一桁
minute: 'numeric', // 2-digit: 差はない?
second: 'numeric', // 2-digit: 差はない?
timeZone: 'Asia/Tokyo'
};
console.log(event.toLocaleString("ja-jp", options));
以下で、ドキュメント見ながら試しましょう
和暦にしたいとき
calendar: "japanese", 和暦
年月日の文字表示だと、ゼロ埋めは、NumberFormat 等で頑張る
dateStyle と year などは並行指定出来ない為、漢字表記の場合には自分でなんとかするしかないのが現状?
メモ: dateStyle は timeStyle と一緒に使用することができますが、他のオプション (weekday, hour, month, など) と一緒に使用することはできません。
const number = 3;
console.log(new Intl.NumberFormat('ja-JP', { minimumIntegerDigits: 2 }).format(number));
DateTimeFormat の 詳細
あとがき
検索するのは大切だけれど、すぐに飛びつくと痛い目を見るので、納得のいくまで調べるのは大切ですね。
勿論、時間制限はあるので、ToDo にしておいて後でってのでも。