Skip to main contentModule date
Source - MONTH_ABBREVS 🔒
- civil_from_days 🔒
- compose_civil_ms 🔒
Date.prototype.set* 系メソッドが setTime も含めて1つも実装されておらず、
date_get に getter しか登録されていない丸ごと未対応バグだった
(d.setFullYear(2025)/d.setDate(d.getDate()+1) 等、Date を書き換える
定番イディオムが軒並み undefined is not a function になっていた)。
date_ctor の多引数分岐と同じ正規化ロジック(月は0始まり・範囲外は繰り上げ/
繰り下げ)を共有ヘルパへ切り出し、getter と対称な set* 一式を追加する。- date_ctor 🔒
new Date(...)。construct_object が用意する this は使わず、ObjKind::DateObj を
積んだオブジェクトを直接返す(RegExp/Map/Set と同じ設計)。
対応する引数形式: 0引数(現在時刻)/ 1引数(epoch ミリ秒 or ISO 8601 日時文字列)/
2引数以上(年, 月[0始まり], 日?, 時?, 分?, 秒?, ミリ秒?)。- date_get
- date_get_date 🔒
- date_get_day 🔒
- date_get_full_year 🔒
- date_get_hours 🔒
- date_get_milliseconds 🔒
- date_get_minutes 🔒
- date_get_month 🔒
- date_get_seconds 🔒
- date_get_time 🔒
- date_get_timezone_offset 🔒
- date_get_year 🔒
setFullYear(y, mo?, d?)。省略された引数は現在値を引き継ぐ(仕様どおり)。
Date.prototype.getYear()(Annex B.2.4。getFullYear() - 1900 を返す
2桁年時代の遺産)が丸ごと未対応だった。- date_ms 🔒
- date_now_static 🔒
- date_parse_static 🔒
- date_set_date 🔒
- date_set_full_year 🔒
- date_set_hours 🔒
- date_set_milliseconds 🔒
- date_set_minutes 🔒
- date_set_month 🔒
- date_set_seconds 🔒
- date_set_time 🔒
- date_set_year 🔒
Date.prototype.setYear(y)(Annex B.2.5)。0 <= y <= 99 なら 1900+y
をフルイヤーとして設定し、それ以外は y をそのままフルイヤーとして使う
(仕様どおりの奇妙な後方互換ロジック)。- date_to_date_string 🔒
toDateString/toLocaleDateString(日付部分のみ)。以前は toString と同じ
フル ISO 日時文字列を返しており、new Date(0).toDateString() に時刻部分が
混入していた(toTimeString 側は逆に日付部分が混入していた)。- date_to_iso_string 🔒
- date_to_locale_date_string 🔒
- date_to_locale_string 🔒
- date_to_locale_time_string 🔒
- date_to_string 🔒
- date_to_time_string 🔒
toTimeString/toLocaleTimeString(時刻部分のみ)。- date_utc_static 🔒
Date.UTC(year, month?, day?, hours?, minutes?, seconds?, ms?)。new Date(...)
の多引数コンストラクタと同じ成分だが、Date インスタンスではなく epoch ミリ秒の
数値を直接返す静的ファクトリ(Date.now/Date.parse と3つ揃いのはずが1つ
欠けていた)。省略された引数の既定値は仕様どおり year/month 以外は0、
day のみ1。- date_value_ms 🔒
Value(Date インスタンス想定)から epoch ミリ秒を取り出す。date_ms は
このファイル内 private のため、interp.rs から呼べる薄いラッパー。- date_write_ms 🔒
- days_from_civil 🔒
- (年,月,日) → 1970-01-01 からの経過日数。上記の逆変換(同じ Howard Hinnant アルゴリズム)。
- decompose_ms 🔒
- epoch ミリ秒 → (年,月,日,時,分,秒,ミリ秒,曜日[0=日曜]) の UTC 分解。
- epoch_ms_now 🔒
- format_iso 🔒
- format_locale_date 🔒
toLocaleDateString/.toLocaleTimeString/.toLocaleStringが丸ごと
intl_datetime_format_format(実体はval.to_js_string()、つまり
toISOString()相当のISO文字列をそのまま返すだけのスタブ)へ委譲
されており、日付のみ/時刻のみ/日時両方という3種の呼び分けが一切
無かったバグ(toLocaleDateString()が"2024-01-15T00:00:00.000Z"を
返し、本来の"2024-01-15"にならない等)。本格的なCLDRロケール
データベースは無いため、en-USをはじめとする最も一般的な数値のみの
書式(YYYY-MM-DD/HH:MM:SS)に限定した簡略実装とする(曜日名・
月名等のロケール依存文字列出力、options引数によるフォーマット
カスタマイズは非対応のまま)。2026-07-18 発見・実装。- format_locale_time 🔒
- input_date_ms_to_value 🔒
- 上記の逆変換:
Date オブジェクトの epoch ミリ秒を type に応じた
value 属性文字列(date → YYYY-MM-DD、month → YYYY-MM)へ整形する。 - input_value_as_date_ms 🔒
input.valueAsDate(HTML5。type="date"/"month" の .value 文字列を
Date オブジェクトとして読み書きする IDL 属性。丸ごと未対応だった。仕様上は
week にも適用されるが、ISO 週番号⇄暦日の変換は本キャンペーンの規模を超える
ため対象外とする簡略方針(date/month 以外は常に null。valueAsNumber
が対象外の type で NaN を返すのと異なり、valueAsDate は仕様どおり
null を返す)。interp.rs の DOM プロパティ get/set から呼ぶ。- parse_date_string 🔒
- ISO 8601(
parse_iso_date)を先に試し、失敗すれば RFC 2822 形式
(parse_rfc2822_date)にフォールバックする。Date コンストラクタ/Date.parse
双方の単一文字列引数はこれを使う。 - parse_hh_mm 🔒
- ISO 8601 のサブセット(
YYYY-MM-DD/YYYY-MM-DDTHH:mm:ss[.sss][Z|±HH:mm] 等)を解析して
epoch ミリ秒を返す。Date コンストラクタ/Date.parse の「日時文字列パースは非対応」
だった大きな既知の限界を、最も一般的な ISO 8601 形式に限定して解消する
(RFC 2822 形式は parse_rfc2822_date/parse_date_string が別途対応。それ以外の
実装依存フォーマット("Jan 1, 2024" 等)は非対応のまま)。 - parse_iso_date 🔒
- parse_rfc2822_date 🔒
- RFC 2822(HTTP日付ヘッダ等でよく使われる
"Mon, 25 Dec 2023 00:00:00 GMT" 形式)の
日時文字列を解析する。Date/Date.parse は ISO 8601 サブセットのみ対応で、この形式は
丸ごと非対応のままだった(parse_iso_date の doc コメントにも既知の制約として
明記されていた)。曜日名は任意(あれば読み飛ばすだけ)。タイムゾーンは
GMT/UT/Z(0オフセット扱い)または +HHMM/-HHMM のみ対応
(EST/PST 等の略称は非対応で0オフセット扱いにフォールバック)。 - parse_tz_offset_hhmm 🔒
- タイムゾーンオフセットの
±HH:mm/±HHmm/±HH いずれの表記も解釈する。
以前は parse_hh_mm(コロン必須)をそのまま流用しており、コロン無し4桁形式
(+0900 等。ISO 8601/ECMA-262 Date Time String 双方で正当な表記)を
「時=900・分=0」と誤読し、実際のオフセットの60倍という壊れた値になる
静かなバグだった("2024-01-01T00:00:00+0900" が丸ごと不正な日時にずれる)。