esspec

1. Time Zone Offset String Format (続き)

前回の振り返りを経て、Time Zone Offset String Formatの仕様確認から開始されました。

文法と構造

文法的パラメータ(Extended)

文法定義において、パラメータ(Extendedなど)による生成規則の制御について議論されました。

実装と挙動の確認

2. The Date Constructor

Dateコンストラクタの仕様読み合わせに入りました。

Intrinsic Objects と Realm

仕様書内で登場する %Date% という表記に関連して、Intrinsic Objects(固有オブジェクト)と Realm(レルム)についての解説が行われました。

Dateコンストラクタの挙動

Dateは関数としても、コンストラクタ(new付き)としても呼び出せます。

  1. 関数として呼び出された場合 (NewTarget is undefined)
    • 引数に関わらず、現在時刻(UTC)を表す文字列を返す(Date.prototype.toString相当)。
    • 引数は無視される(仕様上の挙動として確認され、驚きがあった点)。
  2. コンストラクタとして呼び出された場合 (new Date(...))
    • 引数なし (new Date()):
      • 現在時刻のタイムバリューを生成し、内部スロット [[DateValue]] に設定する。
    • 引数1つ (new Date(value)):
      • value が Dateオブジェクトの場合: その [[DateValue]] をコピーする。
      • それ以外: ToPrimitive(value) を行う。
        • 結果が文字列の場合: Date.parse と同じアルゴリズムでパースする。
        • 結果が数値の場合: そのままタイムバリュー(ミリ秒)として扱う(TimeClipで有効範囲に丸められる)。
    • 引数2つ以上 (new Date(year, month, ...)):
      • year, month は必須。それ以降(date, hours, minutes, seconds, ms)は省略可能。
      • 省略時のデフォルト値:
        • date: 1
        • 時刻関連: 0
      • MakeFullYear: year が 0〜99 の場合、1900を加算して 1900〜1999年として扱う(レガシーな挙動)。
      • 各要素から MakeDate, MakeTime を経て最終的な FinalDate を計算し、[[DateValue]] に設定する。

内部スロットと継承

3. Properties of the Date Constructor

Dateコンストラクタ自身が持つプロパティについて。

Date.parse (string)

文字列を日付に変換するメソッド。

一貫性の要件 (Consistency)

あるDateオブジェクト x において、ミリ秒が0である場合、以下の式は同じ数値を生成すべきである(推奨)。

  1. x.valueOf()
  2. Date.parse(x.toString())
  3. Date.parse(x.toUTCString())
  4. Date.parse(x.toISOString())

ただし、Date.parse(x.toLocaleString()) については、同じ値を生成することは求められていない(フォーマットが多様であり、パースできない場合も多いため)。


次回の予定