diff --git a/CHANGELOG.md b/CHANGELOG.md index 6d46d6f7..48723787 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,11 @@ Versions with only mechanical changes will be omitted from the following list. * Add `DurationRound` trait that allows rounding and truncating by `Duration` (@robyoung) +### Internal Improvements + +* Code improvements to impl `From` for `js_sys` in wasm to reuse code (@schrieveslaach) + + ## 0.4.12 ### New Methods and impls diff --git a/src/datetime.rs b/src/datetime.rs index cb337098..db282214 100644 --- a/src/datetime.rs +++ b/src/datetime.rs @@ -753,22 +753,18 @@ impl From> for SystemTime { #[cfg(all(target_arch = "wasm32", not(target_os = "wasi"), feature = "wasmbind"))] impl From for DateTime { fn from(date: js_sys::Date) -> DateTime { - let time = date.get_time() as i64; - DateTime::::from_utc( - NaiveDateTime::from_timestamp(time / 1000, ((time % 1000) * 1_000_000) as u32), - Utc, - ) + DateTime::::from(&date) } } #[cfg(all(target_arch = "wasm32", not(target_os = "wasi"), feature = "wasmbind"))] impl From<&js_sys::Date> for DateTime { fn from(date: &js_sys::Date) -> DateTime { - let time = date.get_time() as i64; - DateTime::::from_utc( - NaiveDateTime::from_timestamp(time / 1000, ((time % 1000) * 1_000_000) as u32), - Utc, - ) + let millisecs_since_unix_epoch: u64 = date.get_time() as u64; + let secs = millisecs_since_unix_epoch / 1000; + let nanos = 1_000_000 * (millisecs_since_unix_epoch - 1000 * secs); + let naive = NaiveDateTime::from_timestamp(secs as i64, nanos as u32); + DateTime::from_utc(naive, Utc) } } diff --git a/src/offset/utc.rs b/src/offset/utc.rs index 23b536f2..de38594b 100644 --- a/src/offset/utc.rs +++ b/src/offset/utc.rs @@ -54,11 +54,7 @@ impl Utc { #[cfg(all(target_arch = "wasm32", not(target_os = "wasi"), feature = "wasmbind"))] pub fn now() -> DateTime { let now = js_sys::Date::new_0(); - let millisecs_since_unix_epoch: u64 = now.get_time() as u64; - let secs = millisecs_since_unix_epoch / 1000; - let nanos = 1_000_000 * (millisecs_since_unix_epoch - 1000 * secs); - let naive = NaiveDateTime::from_timestamp(secs as i64, nanos as u32); - DateTime::from_utc(naive, Utc) + DateTime::::from(now) } }