#conversion #date #gregorian #wasm #target #hijri #hijri-calendar

hijri_date

provides functionality for conversion between hijri and gregorian calander (with wasm target)

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

#136 in Date and time

47 downloads per month

MIT license

72KB
788 lines

HijriDate-rs

Released API docs

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

Chrono

Dependencies

~1–1.4MB
~22K SLoC