summaryrefslogtreecommitdiffstats
path: root/src/utils/dateutil.rs
diff options
context:
space:
mode:
authorNora <nora.widdecke@tu-bs.de>2019-01-09 22:10:53 +0100
committerNora <nora.widdecke@tu-bs.de>2019-01-09 22:11:07 +0100
commit180a393ff65ce96cfd235c1cf8858ca38c9d7b28 (patch)
tree7c1377f2af74ad7a5441340b0fcc3b1b58b5cc79 /src/utils/dateutil.rs
parenta1156ab107680faa98a08127e353e4aa0f998911 (diff)
create module utils
Diffstat (limited to 'src/utils/dateutil.rs')
-rw-r--r--src/utils/dateutil.rs64
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")));
+}