17 releases
0.5.1 | Aug 16, 2023 |
---|---|
0.5.0 | Aug 16, 2023 |
0.4.1 | Oct 23, 2022 |
0.4.0 | Mar 25, 2021 |
0.1.6 | Aug 6, 2018 |
#108 in Date and time
72KB
788 lines
HijriDate-rs
Convert between hijri and gregorian date. (with wasm target)
Limits
The algorithm used has the following limits:
Minimum | Maximum | |
---|---|---|
Hijri | 1356 | 1499 |
Gregorian | 1938 | 2076 |
Minimum Rust version
From version 0.4.0
and onwards the MSRV is 1.51
Usage
Conversion
- Hijri → Gregorian
use hijri_date::HijriDate;
let hd = HijriDate::from_hijri(1439,11,19);
assert_eq!((2018,8,1), (hd.year_gr(), hd.month_gr(), hd.day_gr()));
- Gregorian → Hijri
use hijri_date::HijriDate;
let hd = HijriDate::from_gr(2000,07,31);
assert_eq!((1421,4,29), (hd.year(), hd.month(), hd.day()));
Comparison
use hijri_date::HijriDate;
let hd_1 = HijriDate::from_hijri(1500, 12, 30);
let hd_2 = HijriDate::from_hijri(1356, 1, 1);
assert!(hd_1 > hd_2);
Misc
- Subtract duration from a day
use hijri_date::{Duration,HijriDate};
let hd_1 = HijriDate::from_hijri(1420, 06, 15);
let hd_2 = HijriDate::from_hijri(1420, 05, 29);
assert_eq!(hd_1 - Duration::days(16), hd_2);
- Subtract a day from another to get a duration
use hijri_date::{Duration,HijriDate};
let hd_1 = HijriDate::from_hijri(1356, 06, 15);
let hd_2 = HijriDate::from_hijri(1356, 06, 7);
assert_eq!(hd_1 - hd_2, Duration::days(8));
Formatting
- Hijri day and month name
use hijri_date::HijriDate;
let hd = HijriDate::from_hijri(1439,11,18);
println!("{}", hd.format("%Y %M %D"));
- Formatting guide
hijri
%Y hijri_year
%m hijri_month
%d hijri_day
%D hijri_day_name
%M hijri_month_name
%l hijri_month_len
gregorian
%gY gregorian_year
%gm gregorian_month
%gd gregorian_day
%gD gregorian_day_name
%gM gregorian_month_name
Wasm
To compile to Wasm run:
cargo build --release --target wasm32-unknown-unknown
Deno bindings are exposed, see ./deno
for more info
Credits
I translated Tytkal's Python library to Rust.
-
Original algorithm author
Suhail Alkowaileet
-
Python version author
Khalid Al-hussayen
Dependencies
~1–1.4MB
~22K SLoC