#[cfg(not(target_arch = "wasm32"))]
use std::time::{SystemTime, UNIX_EPOCH};
#[must_use]
pub(crate) fn today_ymd() -> Option<i64> {
#[cfg(target_arch = "wasm32")]
{
None
}
#[cfg(not(target_arch = "wasm32"))]
{
let epoch_days = SystemTime::now().duration_since(UNIX_EPOCH).ok()?.as_secs() / 86_400;
#[allow(clippy::cast_possible_wrap)]
let (year, month, day) = civil_from_days(epoch_days as i64);
Some(year * 10_000 + month * 100 + day)
}
}
#[cfg(not(target_arch = "wasm32"))]
fn civil_from_days(days_since_epoch: i64) -> (i64, i64, i64) {
let z = days_since_epoch + 719_468;
let era = if z >= 0 { z } else { z - 146_096 } / 146_097;
let day_of_era = z - era * 146_097; let year_of_era =
(day_of_era - day_of_era / 1460 + day_of_era / 36_524 - day_of_era / 146_096) / 365; let year = year_of_era + era * 400;
let day_of_year = day_of_era - (365 * year_of_era + year_of_era / 4 - year_of_era / 100); let month_prime = (5 * day_of_year + 2) / 153; let day = day_of_year - (153 * month_prime + 2) / 5 + 1; let month = if month_prime < 10 {
month_prime + 3
} else {
month_prime - 9
}; let year = if month <= 2 { year + 1 } else { year };
(year, month, day)
}
#[cfg(all(test, not(target_arch = "wasm32")))]
#[path = "clock_tests.rs"]
mod tests;