web-time

Crates.io Version Live Build Status Docs.rs Documentation Main Documentation

Description

Complete drop-in replacement for [std::time] that works in the browser.

Currently [Instant::now()] and [SystemTime::now()] will simply panic when using the wasm32-unknown-unknown target. This implementation uses [Performance.now()] for [Instant] and [Date.now()] for [SystemTime] to offer a drop-in replacement that works in the browser.

At the same time the library will simply re-export [std::time] when not using the wasm32-unknown-unknown target and will also not pull in any dependencies.

Additionally, if compiled with target-feature = "atomics" it will synchronize the timestamps to account for different context's, like web workers. See [Performance.timeOrigin] for more information.

Target

This library specifically targets browsers, that support [Performance.now()], with the wasm32-unknown-unknown target. Emscripten is not supported. WASI doesn't require support as it has it's own native API to deal with [std::time].

Furthermore it depends on [wasm-bindgen], which is required. This library will continue to depend on it until a viable alternative presents itself, in which case multiple ecosystems could be supported.

Note

Currently a known bug is affecting browsers on operating system other then Windows. This bug prevents [Instant] from continuing to tick when the context is asleep. This doesn't necessarily conflict with Rusts requirements of [Instant], but might still be unexpected.

See the MDN documentation on this for more information.

Usage

You can simply import the types you need: ```rust use web_time::{Instant, SystemTime};

let now = Instant::now(); let time = SystemTime::now(); ```

MSRV

As this library heavily relies on [wasm-bindgen] the MSRV depends on it. At the point of time this was written the MSRV is 1.56.

Alternatives

instant Crates.io is a popular alternative! However the API it implements doesn't match [std::time] exactly.

Changelog

See the [CHANGELOG] file for details.

Attribution

Inspiration was taken from the instant project.

Additional insight was taken from the time project.

License

Licensed under either of

at your option.

Copyright

A majority of the code and documentation was taken from [std::time]. For license information see #License.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.