From f0e6a2b47d933c0eaf94beba1d40b127638ba3d5 Mon Sep 17 00:00:00 2001 From: Abraham Toriz Date: Mon, 5 Jul 2021 12:14:09 -0500 Subject: [PATCH] finish human time parsing --- src/timeparse.rs | 7 ++++++- src/timeparse/strings.rs | 3 ++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/timeparse.rs b/src/timeparse.rs index b5191db..93d8646 100644 --- a/src/timeparse.rs +++ b/src/timeparse.rs @@ -207,7 +207,9 @@ mod tests { } fn time_diff(t1: DateTime, t2: DateTime) { - assert!((t1 - Utc.from_utc_datetime(&t2.naive_utc())).num_seconds() < 1, "too different"); + let diff = (t1 - dbg!(Utc.from_utc_datetime(&dbg!(t2.naive_utc())))).num_seconds(); + + assert!(diff < 1, "too different: {} s", diff); } #[test] @@ -242,5 +244,8 @@ mod tests { time_diff(parse_time("a m ago").unwrap(), Local::now() - Duration::minutes(1)); time_diff(parse_time("an hr ago").unwrap(), Local::now() - Duration::hours(1)); time_diff(parse_time("a min ago").unwrap(), Local::now() - Duration::minutes(1)); + time_diff(parse_time("two hours and fifteen minuts ago").unwrap(), Local::now() - Duration::minutes(2 * 60 + 15)); + time_diff(parse_time("two hours and thirty minuts ago").unwrap(), Local::now() - Duration::minutes(2 * 60 + 30)); + // time_diff(parse_time("two and a half hours ago").unwrap(), Local::now() - Duration::minutes(150)); } } diff --git a/src/timeparse/strings.rs b/src/timeparse/strings.rs index fd77f5f..a07aeb0 100644 --- a/src/timeparse/strings.rs +++ b/src/timeparse/strings.rs @@ -3,6 +3,7 @@ use std::collections::HashMap; use regex::Regex; lazy_static! { + // https://regex101.com/r/V9zYQu/1/ pub static ref HUMAN_REGEX: Regex = Regex::new(r"(?xi) (?P (?P @@ -29,7 +30,7 @@ lazy_static! { )| (?P\d+) ) - (\s+)?m(in)?(ute)?s? + (\s+)?m(in)?(ute?)?s? )? \s+ago ").unwrap();