真面目にPlainDateTimeオブジェクトを作ろうとすると、既存のデータ構造のままでは面倒臭かった。パッと食べさせられる日時データを持っていないことが原因だ。しかし、必要なキーさえ揃っていれば、日時関連ではないキーも持っているオブジェクトを食べさせても、うまく作成してくれるようだ。あまり関係ないが「Temporal」って長いし、「PlainDateTime」も長い。

hail2u@localhost:~/Projects/hail2u.net$ node -i
Welcome to Node.js v26.0.0.
Type ".help" for more information.
> const from = Temporal.PlainDateTime.from
undefined
> from({foo:"Foo"})
Uncaught TypeError: Temporal error: PartialDateTime cannot be empty.
    at from (<anonymous>)
> from({foo:"Foo",year:1})
Uncaught TypeError: Temporal error: Month or monthCode must be provided.
    at from (<anonymous>)
> from({foo:"Foo",year:1,month:1})
Uncaught TypeError: Temporal error: Required day field is empty.
    at from (<anonymous>)
> from({foo:"Foo",year:1,month:1,day:1})
PlainDateTime [Temporal.PlainDateTime] {}

Node.js v26での例(転載しやすいので)だが、Chrome 148や、Edge 148、Firefox 151などでも同じ挙動で、エラー・メッセージが違うだけだ。year系と、month系、dayが最低限必要だが、他にキーがあっても作成できるようだ。それっぽいキーを持っているオブジェクトを投げると何とかしてくれ、なかなか便利かもしれない。

仕様を読んでも、実装依存ではなさそうだ。キー名が被って誤解釈する可能性が大いにあるが、丁度良さ過ぎて誘惑に負けそうになる。ゼロ詰めした文字列日時情報は持っているので、テンプレートを使ってRFC 9557の文字列を作ると手っ取り早いが、これまたちょっと怪しい。コードが長くなっても必要なだけキーを抜き出して食べさせるようにしたい。