0
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

TypeScript(JavaScript) : 日付加減算は set***() で/ゼロ埋めは "2-digit" で

Last updated at Posted at 2022-12-11

背景

AWS Dynamo DB へデータを入れる際に、以下が必要だった。
自分で実装する道はあるけど・・車輪の再発明なんてしたくないので、公式ドキュメントとかをみてたら、一応みつかったのでその際の備忘録

  • テストデータ作成用に、Date().AddHours()
  • DynamoDB の Timestamp Sort Key 登録用に、Date/Time を固定長(Zero padding) したい(Date Format)

大切なのは、簡単に検索結果に飛びつかないこと

結論

日付データの加算・減算

データ型の、setHours() 等をそのまま使えばいいだけ。
そう、自分で実装する必要なんてないんです。
とはいえ、AddHours() とかあったほうが分かりやすいし記述も楽なので、その為の再実装はありかな。


image.png

setHours() を使った、Date の加減算
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 設定がある
image.png

ってことで、基本は "2-digit" に設定してやればいい。
とはいえ、month/day/hour だけかな。
year は 四桁必要だし、minute/second は numeric/2-digit の差が今はなさそう

とはいえ、minute 等を削除すると、表示自体無くなるので、省略は出来ない

image.png

0埋め処理
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, など) と一緒に使用することはできません。

NumberFormat の例
const number = 3;
console.log(new Intl.NumberFormat('ja-JP', { minimumIntegerDigits: 2 }).format(number));

DateTimeFormat の 詳細

あとがき

検索するのは大切だけれど、すぐに飛びつくと痛い目を見るので、納得のいくまで調べるのは大切ですね。
勿論、時間制限はあるので、ToDo にしておいて後でってのでも。

0
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?