diff options
author | Nora <nora.widdecke@tu-bs.de> | 2019-01-09 22:10:53 +0100 |
---|---|---|
committer | Nora <nora.widdecke@tu-bs.de> | 2019-01-09 22:11:07 +0100 |
commit | 180a393ff65ce96cfd235c1cf8858ca38c9d7b28 (patch) | |
tree | 7c1377f2af74ad7a5441340b0fcc3b1b58b5cc79 /src/utils/dateutil.rs | |
parent | a1156ab107680faa98a08127e353e4aa0f998911 (diff) |
create module utils
Diffstat (limited to 'src/utils/dateutil.rs')
-rw-r--r-- | src/utils/dateutil.rs | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/src/utils/dateutil.rs b/src/utils/dateutil.rs new file mode 100644 index 0000000..a686961 --- /dev/null +++ b/src/utils/dateutil.rs @@ -0,0 +1,64 @@ +use chrono::*; + +pub fn date_from_str(date_str: &str) -> ParseResult<Date<Local>> { + if date_str == "today" || date_str == "now" { + return Ok(Local::now().date()); + } + let naive_date = &NaiveDate::parse_from_str(date_str, "%Y-%m-%d")?; + Ok(Local.from_local_date(naive_date).unwrap()) +} + +pub fn week_from_str_begin(date_str: &str) -> Result<Date<Local>,String> { + let now = Local::now(); + if date_str == "toweek" || date_str == "thisweek" { + return Ok(Local.isoywd(now.year(), now.iso_week().week(), Weekday::Mon)); + } + if let Ok(date) = &NaiveDate::parse_from_str(&format!("{}-1", date_str), "%G-W%V-%u") { + return Ok(Local.from_local_date(date).unwrap()); + } + if let Ok(date) = &NaiveDate::parse_from_str(&format!("{}-{}-1", now.year(), date_str), "%G-W%V-%u") { + return Ok(Local.from_local_date(date).unwrap()); + } + Err("Could not parse '{}' as week".to_string()) +} + +pub fn week_from_str_end(date_str: &str) -> Result<Date<Local>,String> { + let now = Local::now(); + if date_str == "toweek" || date_str == "thisweek" { + return Ok(Local.isoywd(now.year(), now.iso_week().week(), Weekday::Sun)); + } + if let Ok(date) = &NaiveDate::parse_from_str(&format!("{}-7", date_str), "%G-W%V-%u") { + return Ok(Local.from_local_date(date).unwrap()); + } + if let Ok(date) = &NaiveDate::parse_from_str(&format!("{}-{}-7", now.year(), date_str), "%G-W%V-%u") { + return Ok(Local.from_local_date(date).unwrap()); + } + Err("Could not parse '{}' as week".to_string()) +} + +#[test] +fn test_week_from_str_begin() { + let date = week_from_str_begin("2018-W50").unwrap(); + assert_eq!("2018-12-10", format!("{}", date.format("%F"))); + let date = week_from_str_begin("W50").unwrap(); + assert_eq!("2019-12-09", format!("{}", date.format("%F"))); +} + +#[test] +fn test_week_from_str_begin_current_year() { + // TODO test must be adapted once a year. hum. + let date = week_from_str_begin("W50").unwrap(); + assert_eq!("2019-12-09", format!("{}", date.format("%F"))); +} + +#[test] +fn test_week_from_str_end() { + let date = week_from_str_end("W50").unwrap(); + assert_eq!("2019-12-15", format!("{}", date.format("%F"))); +} +#[test] +fn test_week_from_str_end_current_year() { + // TODO test must be adapted once a year. hum. + let date = week_from_str_end("W50").unwrap(); + assert_eq!("2019-12-15", format!("{}", date.format("%F"))); +} |