From 4a3b19bba608c521cc37ccb91dd7ee5520e70e2d Mon Sep 17 00:00:00 2001 From: Ravi Sawlani Date: Tue, 24 Aug 2021 22:26:30 +0530 Subject: [PATCH 1/8] added common business date acronyms --- cli/src/argparse/args/time.rs | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/cli/src/argparse/args/time.rs b/cli/src/argparse/args/time.rs index 4581d0a41..029cfa8e1 100644 --- a/cli/src/argparse/args/time.rs +++ b/cli/src/argparse/args/time.rs @@ -154,11 +154,18 @@ fn named_date( move |input: &str| { let local_today = now.with_timezone(&local).date(); let remaining = &input[input.len()..]; + let day_index = local_today.weekday().num_days_from_monday(); match input { "yesterday" => Ok((remaining, local_today - Duration::days(1))), "today" => Ok((remaining, local_today)), "tomorrow" => Ok((remaining, local_today + Duration::days(1))), // TODO: lots more! + "eod"=>Ok((remaining,local_today+Duration::days(1))), + "sod"=>Ok((remaining,local_today)), + "eow"=> Ok((remaining,local_today+Duration::days((6-day_index).into()))), + "eoww"=>Ok((remaining,local_today+Duration::days((5-day_index).into()))), + "sow"=>Ok((remaining,local_today+Duration::days((6-day_index).into()))), + "soww"=>Ok((remaining,local_today+Duration::days((7-day_index).into()))), _ => Err(Err::Error(Error::new(input, ErrorKind::Tag))), } .map(|(rem, dt)| (rem, dt.and_hms(0, 0, 0).with_timezone(&Utc))) From 90b06df30f31b5c08b7b8a1ecd69bc80da3319f1 Mon Sep 17 00:00:00 2001 From: Ravi Sawlani Date: Tue, 24 Aug 2021 22:38:27 +0530 Subject: [PATCH 2/8] refactor --- cli/src/argparse/args/time.rs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/cli/src/argparse/args/time.rs b/cli/src/argparse/args/time.rs index 029cfa8e1..dab4f0372 100644 --- a/cli/src/argparse/args/time.rs +++ b/cli/src/argparse/args/time.rs @@ -160,12 +160,12 @@ fn named_date( "today" => Ok((remaining, local_today)), "tomorrow" => Ok((remaining, local_today + Duration::days(1))), // TODO: lots more! - "eod"=>Ok((remaining,local_today+Duration::days(1))), - "sod"=>Ok((remaining,local_today)), - "eow"=> Ok((remaining,local_today+Duration::days((6-day_index).into()))), - "eoww"=>Ok((remaining,local_today+Duration::days((5-day_index).into()))), - "sow"=>Ok((remaining,local_today+Duration::days((6-day_index).into()))), - "soww"=>Ok((remaining,local_today+Duration::days((7-day_index).into()))), + "eod" => Ok((remaining,local_today+Duration::days(1))), + "sod" => Ok((remaining,local_today)), + "eow" => Ok((remaining,local_today+Duration::days((6-day_index).into()))), + "eoww" => Ok((remaining,local_today+Duration::days((5-day_index).into()))), + "sow" => Ok((remaining,local_today+Duration::days((6-day_index).into()))), + "soww" => Ok((remaining,local_today+Duration::days((7-day_index).into()))), _ => Err(Err::Error(Error::new(input, ErrorKind::Tag))), } .map(|(rem, dt)| (rem, dt.and_hms(0, 0, 0).with_timezone(&Utc))) From c5e18aec318c1df898cacd89707d463d3994c55a Mon Sep 17 00:00:00 2001 From: Ravi Sawlani Date: Tue, 24 Aug 2021 22:41:45 +0530 Subject: [PATCH 3/8] lint issue --- cli/src/argparse/args/time.rs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/cli/src/argparse/args/time.rs b/cli/src/argparse/args/time.rs index dab4f0372..1fe9565d6 100644 --- a/cli/src/argparse/args/time.rs +++ b/cli/src/argparse/args/time.rs @@ -160,12 +160,12 @@ fn named_date( "today" => Ok((remaining, local_today)), "tomorrow" => Ok((remaining, local_today + Duration::days(1))), // TODO: lots more! - "eod" => Ok((remaining,local_today+Duration::days(1))), + "eod" => Ok((remaining,local_today + Duration::days(1))), "sod" => Ok((remaining,local_today)), - "eow" => Ok((remaining,local_today+Duration::days((6-day_index).into()))), - "eoww" => Ok((remaining,local_today+Duration::days((5-day_index).into()))), - "sow" => Ok((remaining,local_today+Duration::days((6-day_index).into()))), - "soww" => Ok((remaining,local_today+Duration::days((7-day_index).into()))), + "eow" => Ok((remaining,local_today + Duration::days((6-day_index).into()))), + "eoww" => Ok((remaining,local_today + Duration::days((5-day_index).into()))), + "sow" => Ok((remaining,local_today + Duration::days((6-day_index).into()))), + "soww" => Ok((remaining,local_today + Duration::days((7-day_index).into()))), _ => Err(Err::Error(Error::new(input, ErrorKind::Tag))), } .map(|(rem, dt)| (rem, dt.and_hms(0, 0, 0).with_timezone(&Utc))) From f824d6123c6a6a6ebb41a6ecdef89f0089f4dfd5 Mon Sep 17 00:00:00 2001 From: Ravi Sawlani Date: Wed, 25 Aug 2021 12:42:37 +0530 Subject: [PATCH 4/8] added tests --- cli/src/argparse/args/time.rs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/cli/src/argparse/args/time.rs b/cli/src/argparse/args/time.rs index 1fe9565d6..47a82e1fc 100644 --- a/cli/src/argparse/args/time.rs +++ b/cli/src/argparse/args/time.rs @@ -308,6 +308,12 @@ mod test { #[case::today_from_evening(ldt(2021, 3, 1, 21, 30, 30), "today", ld(2021, 3, 1))] #[case::tomorrow(ld(2021, 3, 1), "tomorrow", ld(2021, 3, 2))] #[case::tomorow_from_evening(ldt(2021, 3, 1, 21, 30, 30), "tomorrow", ld(2021, 3, 2))] + #[case::end_of_week(ld(2021,8,25,), "eow", ld(2021,8,29))] + #[case::end_of_work_week(ld(2021,8,25), "eoww", ld(2021,8,28))] + #[case::start_of_week(ld(2021,8,25), "sow", ld(2021,8,29))] + #[case::start_of_work_week(ld(2021,8,25), "soww", ld(2021,8,30))] + #[case::end_of_today(ld(2021,8,25), "eod", ld(2021,8,26))] + #[case::start_of_today(ld(2021,8,25), "sod", ld(2021,8,25))] fn test_local_timestamp( #[case] now: Box DateTime>, #[values(*IST, *UTC_FO, *HST)] tz: FixedOffset, From f013233c88c8822b36aa6b48aa665b72faaae31a Mon Sep 17 00:00:00 2001 From: Ravi Sawlani Date: Sat, 28 Aug 2021 00:59:09 +0530 Subject: [PATCH 5/8] document changes --- docs/src/time.md | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/docs/src/time.md b/docs/src/time.md index b82e1b2e1..7b7380a8f 100644 --- a/docs/src/time.md +++ b/docs/src/time.md @@ -28,3 +28,18 @@ Some of the units allow an adjectival form, such as `daily` or `annually`; this [ISO 8601 standard durations](https://en.wikipedia.org/wiki/ISO_8601#Durations) are also allowed. While the standard does not specify the length of "P1Y" or "P1M", Taskchampion treats those as 365 and 30 days, respectively. + + +## Named Timestamps + +Some commonly used named timestamps + + * `today` Start of today + * `yesterday` Start of yesterday + * `tomorrow` Start of tomorrow + * `sod` Start of today + * `eod` End of today + * `sow` Start of the next week + * `eow` End of the week + * 'eoww End of work week + * `soww` Start of the next work week \ No newline at end of file From d001b5dbc931860161a8a4f888f9bf2d5859f9df Mon Sep 17 00:00:00 2001 From: Ravi Sawlani Date: Sat, 28 Aug 2021 01:01:02 +0530 Subject: [PATCH 6/8] update doc --- docs/src/time.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/src/time.md b/docs/src/time.md index 7b7380a8f..28ab9b735 100644 --- a/docs/src/time.md +++ b/docs/src/time.md @@ -41,5 +41,5 @@ Some commonly used named timestamps * `eod` End of today * `sow` Start of the next week * `eow` End of the week - * 'eoww End of work week + * `eoww` End of work week * `soww` Start of the next work week \ No newline at end of file From 3edf45d238ec85c3e81882071e9b603e72391787 Mon Sep 17 00:00:00 2001 From: Ravi Sawlani Date: Sat, 28 Aug 2021 01:47:50 +0530 Subject: [PATCH 7/8] added ref pic --- docs/assets/cgi/name_timestamp.png | Bin 0 -> 8194 bytes docs/src/time.md | 5 ++++- 2 files changed, 4 insertions(+), 1 deletion(-) create mode 100644 docs/assets/cgi/name_timestamp.png diff --git a/docs/assets/cgi/name_timestamp.png b/docs/assets/cgi/name_timestamp.png new file mode 100644 index 0000000000000000000000000000000000000000..d829039b72ece8d2cd64cc2b3548ec9376d72ce8 GIT binary patch literal 8194 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 literal 0 HcmV?d00001 diff --git a/docs/src/time.md b/docs/src/time.md index 28ab9b735..dc3ba28a4 100644 --- a/docs/src/time.md +++ b/docs/src/time.md @@ -42,4 +42,7 @@ Some commonly used named timestamps * `sow` Start of the next week * `eow` End of the week * `eoww` End of work week - * `soww` Start of the next work week \ No newline at end of file + * `soww` Start of the next work week + + +![named timestamp](/docs/assets/cgi/named_timestamp.jpg) From 037807e3acc104e17be7be38d2a6590a6af1b098 Mon Sep 17 00:00:00 2001 From: Ravi Sawlani Date: Sat, 28 Aug 2021 02:06:33 +0530 Subject: [PATCH 8/8] update image ref --- docs/{assets/cgi => src/images}/name_timestamp.png | Bin docs/src/time.md | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) rename docs/{assets/cgi => src/images}/name_timestamp.png (100%) diff --git a/docs/assets/cgi/name_timestamp.png b/docs/src/images/name_timestamp.png similarity index 100% rename from docs/assets/cgi/name_timestamp.png rename to docs/src/images/name_timestamp.png diff --git a/docs/src/time.md b/docs/src/time.md index dc3ba28a4..4053aea29 100644 --- a/docs/src/time.md +++ b/docs/src/time.md @@ -45,4 +45,4 @@ Some commonly used named timestamps * `soww` Start of the next work week -![named timestamp](/docs/assets/cgi/named_timestamp.jpg) +![named timestamp](images/name_timestamp.png)