range_date
A Rust crate for handling date periods (year / quarter / month / day) with validation, parsing, navigation and range generation, built on top of chrono.
Installation
[]
= "0.2.4"
Period Types
| Period | Constructor | String format | Range |
|---|---|---|---|
| Year | DatePeriod::year(2024) |
2024Y |
whole year |
| Quarter | DatePeriod::quarter(2024, 1)? |
2024Q1 |
quarter 1..=4 |
| Month | DatePeriod::month(2024, 3)? |
2024M3 |
month 1..=12 |
| Daily | DatePeriod::daily(2024, 60)? |
2024D60 |
ordinal day 1..=366 |
String format: YYYY<TYPE>[INDEX], where <TYPE> is one of Y / Q / M / D.
Usage
use DatePeriod;
use NaiveDate;
use FromStr;
// Construct & validate
let q1 = quarter?;
assert!;
// Parse & display
let m: DatePeriod = from_str?;
assert_eq!;
// Date boundaries & containment
let first = q1.get_first_day?; // 2024-01-01
let last = q1.get_last_day?; // 2024-03-31
assert!;
// Convert from a date
let day = from_ymd_opt.unwrap;
let _ = from_date_as_quarter; // 2024Q3
// Navigate
let q2 = q1.succ?; // next -> 2024Q2
let q4 = q1.succ_n?; // +3 -> 2024Q4
let _ = q4.pred_n?; // -3 -> 2024Q1
let _ = q1.offset_n?; // signed -> 2023Q4
// Range generation
let start = from_ymd_opt.unwrap;
let end = from_ymd_opt.unwrap;
assert_eq!;
// Decompose / aggregate
assert_eq!;
assert_eq!;
// Serde
let json = to_string?; // "\"2024Q1\""
let back: DatePeriod = from_str?;
assert_eq!;
# Ok::
Documentation
Full API reference on docs.rs.
Contributing
Issues and pull requests are welcome. Before submitting, please run:
License
Licensed under the MIT License.