JavaScriptのDateを加減算した時の処理の流れ
このページは、JavaScriptのDate
を加減算した時の処理の流れをECMAScriptの仕様書を参考にまとめたページです。
例
処理のおおまかな流れ
加算の場合
- 13.8.1 The Addition Operator ( + )から
EvaluateStringOrNumericBinaryExpression(Dateオブジェクト, +, 数値)
が呼ばれるApplyStringOrNumericBinaryOperator(Dateオブジェクト, +, 数値)
が呼ばれるToPrimitive(Dateオブジェクト)
がstring
ヒントで呼ばれる (1-a. / 1.のIf opText is +, then
経由でDate
の文字列値が返る) ※ToPrimitive(数値)
がdefault
ヒントで呼ばれる (1-b.)- 上記2つの値が文字列連結される (1-c.
If Type(lprim) is String or Type(rprim) is String
経由)
※ ヒントはNOTE 1に下記のように記載がある
No hint is provided in the calls to ToPrimitive in steps 1.a and 1.b. All standard objects except Dates handle the absence of a hint as if number were given; Dates handle the absence of a hint as if string were given. Exotic objects may handle the absence of a hint in some other manner.
(意訳) 手順 1.a および 1.b のToPrimitiveの呼び出しにはヒントはありません。Dateを除くすべての標準オブジェクトは、numberが指定されているかのようにヒントの欠如を処理します。Dateは、stringが指定されているかのようにヒントの欠如を処理します。 Exoticオブジェクトは、他の方法でヒントの欠如を処理する場合があります。
減算の場合
- 13.8.2 The Subtraction Operator ( - )から
EvaluateStringOrNumericBinaryExpression(Dateオブジェクト, -, 数値)
が呼ばれるApplyStringOrNumericBinaryOperator(Dateオブジェクト, -, 数値)
が呼ばれるToNumeric(Dateオブジェクト)
が呼ばれる (3.Date
の数値が返る)ToNumeric(数値)
が呼ばれる (4.)- 上記2つの値が
Number::subtract
で数値として減算される (7.)