From 0cd98084da37f4c28ed5cc73e8abc6684a11dca8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=88=B1=E7=89=B9=E6=AF=8F=E7=BE=8A=E9=98=9F?= Date: Wed, 12 Aug 2026 14:27:25 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20Temporal.PlainDateTime.prototype.equals?= =?UTF-8?q?=EF=BC=88=E5=AE=9E=E4=BE=8B/=E5=AD=97=E7=AC=A6=E4=B8=B2/?= =?UTF-8?q?=E5=AF=B9=E8=B1=A1/ZDT=20=E7=BB=9F=E4=B8=80=E6=AF=94=E8=BE=83?= =?UTF-8?q?=EF=BC=8C=E7=BB=91=E5=AE=9A=E6=B3=A8=E5=86=8C=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- crates/oxide_builtins/src/temporal.rs | 15 +++++++++++++++ crates/oxide_vm/src/bindings/bind_temporal.rs | 5 +++++ 2 files changed, 20 insertions(+) diff --git a/crates/oxide_builtins/src/temporal.rs b/crates/oxide_builtins/src/temporal.rs index e02cb12..3edf251 100644 --- a/crates/oxide_builtins/src/temporal.rs +++ b/crates/oxide_builtins/src/temporal.rs @@ -2961,6 +2961,21 @@ pub fn plain_date_time_compare(vm: &mut H, args: &[u8]) -> NativeResu })) } +/// `Temporal.PlainDateTime.prototype.equals(other)`:比较日期时间分量是否相等。 +pub fn plain_date_time_equals(vm: &mut H, args: &[u8]) -> NativeResult { + let (y, m, d, ns) = match plain_date_time_parts(vm, args) { + Ok(parts) => parts, + Err(e) => return NativeResult::Err(e), + }; + let other_val = if args.len() > 1 { vm.reg(args[1]) } else { JsValue::undefined() }; + let other = match plain_date_time_like_parts(vm, other_val, true) { + Ok(parts) => parts, + Err(e) => return NativeResult::Err(e), + }; + let equal = other.0 == y && other.1 == m && other.2 == d && other.3 as u64 == ns as u64; + NativeResult::Ok(JsValue::bool(equal)) +} + fn plain_date_time_parts(vm: &mut H, args: &[u8]) -> Result<(i32, u32, u32, f64), JsValue> { let ptr = receiver_obj(vm, args)?; let obj = unsafe { &*ptr }; diff --git a/crates/oxide_vm/src/bindings/bind_temporal.rs b/crates/oxide_vm/src/bindings/bind_temporal.rs index 9d99cbf..353ce23 100644 --- a/crates/oxide_vm/src/bindings/bind_temporal.rs +++ b/crates/oxide_vm/src/bindings/bind_temporal.rs @@ -530,6 +530,11 @@ pub fn bind_temporal(core: &Arc, session: &KernelSession, global: &m oxide_builtins::temporal::plain_date_time_since:: as *const (), 1, ), + ( + "equals", + oxide_builtins::temporal::plain_date_time_equals:: as *const (), + 1, + ), ], ); bind_well_known_data_property(