summaryrefslogtreecommitdiff
path: root/src/lib.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib.rs')
-rw-r--r--src/lib.rs24
1 files changed, 19 insertions, 5 deletions
diff --git a/src/lib.rs b/src/lib.rs
index a3d0719..f993435 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -219,7 +219,8 @@ pub fn parse(
if specific(last) {
return match specific_moment(first, &config) {
Ok((d1, _)) => match specific_moment(last, &config) {
- Ok((_, d2)) => {
+ Ok((d2, d3)) => {
+ let d2 = pick_terminus(d2, d3);
if d1 <= d2 {
Ok((d1, d2))
} else {
@@ -233,7 +234,8 @@ pub fn parse(
} else {
return match specific_moment(first, &config) {
Ok((d1, _)) => {
- let (_, d2) = relative_moment(last, &config, &d1, false);
+ let (d2, d3) = relative_moment(last, &config, &d1, false);
+ let d2 = pick_terminus(d2, d3);
Ok((d1, d2))
}
Err(s) => Err(s),
@@ -241,7 +243,8 @@ pub fn parse(
}
} else if specific(last) {
return match specific_moment(last, &config) {
- Ok((_, d2)) => {
+ Ok((d2, d3)) => {
+ let d2 = pick_terminus(d2, d3);
let (d1, _) = relative_moment(first, &config, &d2, true);
Ok((d1, d2))
}
@@ -251,13 +254,24 @@ pub fn parse(
// the first moment is assumed to be before now
let (d1, _) = relative_moment(first, &config, &config.now, true);
// the second moment is necessarily after the first momentß
- let (_, d2) = relative_moment(last, &config, &d1, false);
+ let (d2, d3) = relative_moment(last, &config, &d1, false);
+ let d2 = pick_terminus(d2, d3);
return Ok((d1, d2));
}
}
unreachable!();
}
+// for the end time, if the span is less than a day, use the first, otherwise use the second
+// e.g., Monday through Friday at 3 PM should end at 3 PM, but Monday through Friday should end at the end of Friday
+fn pick_terminus(d1: DateTime<Utc>, d2: DateTime<Utc>) -> DateTime<Utc> {
+ if d1.day() == d2.day() && d1.month() == d2.month() && d1.year() == d2.year() {
+ d1
+ } else {
+ d2
+ }
+}
+
fn first_moment() -> DateTime<Utc> {
chrono::MIN_DATE.and_hms_milli(0, 0, 0, 0)
}
@@ -575,7 +589,7 @@ fn relative_moment(
if let Some(day) = m.name("a_day") {
let wd = weekday(day.as_str());
let mut delta =
- config.now.weekday().num_days_from_sunday() as i64 - wd.num_days_from_sunday() as i64;
+ other_time.weekday().num_days_from_sunday() as i64 - wd.num_days_from_sunday() as i64;
if delta <= 0 {
delta += 7;
}