diff options
Diffstat (limited to 'vendor/time/src/interop/js_sys_date_offsetdatetime.rs')
| -rw-r--r-- | vendor/time/src/interop/js_sys_date_offsetdatetime.rs | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/vendor/time/src/interop/js_sys_date_offsetdatetime.rs b/vendor/time/src/interop/js_sys_date_offsetdatetime.rs new file mode 100644 index 00000000..ecbd601e --- /dev/null +++ b/vendor/time/src/interop/js_sys_date_offsetdatetime.rs @@ -0,0 +1,27 @@ +use num_conv::prelude::*; + +use crate::convert::*; +use crate::OffsetDateTime; + +impl From<js_sys::Date> for OffsetDateTime { + /// # Panics + /// + /// This may panic if the timestamp can not be represented. + fn from(js_date: js_sys::Date) -> Self { + // get_time() returns milliseconds + let timestamp_nanos = js_date.get_time() as i128 + * Nanosecond::per(Millisecond).cast_signed().extend::<i128>(); + Self::from_unix_timestamp_nanos(timestamp_nanos) + .expect("invalid timestamp: Timestamp cannot fit in range") + } +} + +impl From<OffsetDateTime> for js_sys::Date { + fn from(datetime: OffsetDateTime) -> Self { + // new Date() takes milliseconds + let timestamp = (datetime.unix_timestamp_nanos() + / Nanosecond::per(Millisecond).cast_signed().extend::<i128>()) + as f64; + Self::new(×tamp.into()) + } +} |
