Skip to content

Commit

Permalink
weekday vs. next-weekday
Browse files Browse the repository at this point in the history
  • Loading branch information
irees committed Jul 20, 2024
1 parent 0c0ea7d commit 9aa0ad0
Show file tree
Hide file tree
Showing 2 changed files with 118 additions and 37 deletions.
35 changes: 30 additions & 5 deletions tl/tt/rel_date.go
Original file line number Diff line number Diff line change
Expand Up @@ -40,25 +40,47 @@ func RelativeDate(currentTime time.Time, relativeDateLabel string) (time.Time, e

// Parse date or use special label
dowOffset := -1
nextFlag := false
switch relativeDateLabel {
case "now":
// default
case "":
// equiv to "now"
case "sunday":
dowOffset = 0
case "monday":
dowOffset = 1
case "tuesday":
dowOffset = 2
case "wednesday":
dowOffset = 3
case "thursday":
dowOffset = 4
case "friday":
dowOffset = 5
case "saturday":
dowOffset = 6
case "next-sunday":
dowOffset = 0
nextFlag = true
case "next-monday":
dowOffset = 1
nextFlag = true
case "next-tuesday":
dowOffset = 2
nextFlag = true
case "next-wednesday":
dowOffset = 3
nextFlag = true
case "next-thursday":
dowOffset = 4
nextFlag = true
case "next-friday":
dowOffset = 5
nextFlag = true
case "next-saturday":
dowOffset = 6
nextFlag = true
default:
// Update to parsed YYYY-MM-DD
t, err := time.Parse("2006-01-02", relativeDateLabel)
Expand All @@ -75,14 +97,17 @@ func RelativeDate(currentTime time.Time, relativeDateLabel string) (time.Time, e

// Check the next 7 days to get the correct weekday
if dowOffset >= 0 {
dowTime := baseTime
for i := 0; i < 7; i++ {
i := 0
if nextFlag {
i = 1
}
for ; i < 8; i++ {
dowTime := baseTime.AddDate(0, 0, i)
curDow := dowTime.Weekday()
if int(curDow) == dowOffset {
baseTime = dowTime
break
// Update and
return dowTime, nil
}
dowTime = dowTime.AddDate(0, 0, 1)
}
}
return baseTime, nil
Expand Down
120 changes: 88 additions & 32 deletions tl/tt/rel_date_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import (

func TestRelativeDate(t *testing.T) {
defaultUtc := "2024-07-16T01:30:00 UTC"
defaultLocal := "2024-07-15T18:30:00 America/Los_Angeles"
defaultLocal := "2024-07-15T10:00:00 America/Los_Angeles"
tcs := []struct {
name string
dateLabel string
Expand All @@ -19,12 +19,14 @@ func TestRelativeDate(t *testing.T) {
expectError bool
}{
{
name: "empty (now, default UTC)",
expect: "2024-07-16T01:30:00Z",
name: "empty (now, default UTC)",
whenLocal: defaultUtc,
expect: "2024-07-16T01:30:00Z",
},
{
name: "date specified",
dateLabel: "2024-07-10",
whenLocal: defaultUtc,
expect: "2024-07-10T01:30:00Z",
},
{
Expand All @@ -36,71 +38,125 @@ func TestRelativeDate(t *testing.T) {
{
name: "date with tz",
dateLabel: "2024-07-16",
whenLocal: "2024-07-15T10:00:00 America/Los_Angeles",
whenLocal: defaultLocal,
expect: "2024-07-16T10:00:00-07:00",
},
{
name: "now with tz",
dateLabel: "now",
whenLocal: defaultLocal,
expect: "2024-07-15T18:30:00-07:00",
expect: "2024-07-15T10:00:00-07:00",
},
// same dow allowed
{
name: "next-friday",
dateLabel: "next-friday",
whenLocal: defaultLocal,
expect: "2024-07-19T18:30:00-07:00",
name: "monday",
dateLabel: "monday",
whenLocal: "2024-07-15T10:00:00 America/Los_Angeles",
expect: "2024-07-15T10:00:00-07:00",
},
{
name: "friday",
dateLabel: "friday",
whenLocal: "2024-07-19T10:00:00 America/Los_Angeles",
expect: "2024-07-19T10:00:00-07:00",
},
// one day before
{
name: "next-sunday with wt",
name: "next-sunday",
dateLabel: "next-sunday",
whenLocal: "2024-07-15T10:00:00 America/Los_Angeles",
whenLocal: "2024-07-20T10:00:00 America/Los_Angeles",
expect: "2024-07-21T10:00:00-07:00",
},
{
name: "next-monday with wt",
name: "next-monday",
dateLabel: "next-monday",
whenLocal: "2024-07-15T10:00:00 America/Los_Angeles",
expect: "2024-07-15T10:00:00-07:00",
}, {
name: "next-tuesday with wt",
whenLocal: "2024-07-21T10:00:00 America/Los_Angeles",
expect: "2024-07-22T10:00:00-07:00",
},
{
name: "next-tuesday",
dateLabel: "next-tuesday",
whenLocal: "2024-07-15T10:00:00 America/Los_Angeles",
expect: "2024-07-16T10:00:00-07:00",
}, {
name: "next-wednesday with wt",
},
{
name: "next-wednesday",
dateLabel: "next-wednesday",
whenLocal: "2024-07-15T10:00:00 America/Los_Angeles",
whenLocal: "2024-07-16T10:00:00 America/Los_Angeles",
expect: "2024-07-17T10:00:00-07:00",
}, {
name: "next-thursday with wt",
},
{
name: "next-thursday",
dateLabel: "next-thursday",
whenLocal: "2024-07-15T10:00:00 America/Los_Angeles",
whenLocal: "2024-07-17T10:00:00 America/Los_Angeles",
expect: "2024-07-18T10:00:00-07:00",
}, {
name: "next-friday with wt",
},
{
name: "next-friday",
dateLabel: "next-friday",
whenLocal: "2024-07-15T10:00:00 America/Los_Angeles",
whenLocal: "2024-07-18T10:00:00 America/Los_Angeles",
expect: "2024-07-19T10:00:00-07:00",
}, {
name: "next-saturday with wt",
},
{
name: "next-saturday",
dateLabel: "next-saturday",
whenLocal: "2024-07-15T10:00:00 America/Los_Angeles",
whenLocal: "2024-07-19T10:00:00 America/Los_Angeles",
expect: "2024-07-20T10:00:00-07:00",
},
// same day of week
{
name: "next-sunday same dow",
dateLabel: "next-sunday",
whenLocal: "2024-07-14T10:00:00 America/Los_Angeles",
expect: "2024-07-21T10:00:00-07:00",
},
{
name: "next-monday same dow",
dateLabel: "next-monday",
whenLocal: "2024-07-15T10:00:00 America/Los_Angeles",
expect: "2024-07-22T10:00:00-07:00",
},
{
name: "next-tuesday same dow",
dateLabel: "next-tuesday",
whenLocal: "2024-07-16T10:00:00 America/Los_Angeles",
expect: "2024-07-23T10:00:00-07:00",
},
{
name: "next-wednesday same dow",
dateLabel: "next-wednesday",
whenLocal: "2024-07-17T10:00:00 America/Los_Angeles",
expect: "2024-07-24T10:00:00-07:00",
},
{
name: "next-thursday same dow",
dateLabel: "next-thursday",
whenLocal: "2024-07-18T10:00:00 America/Los_Angeles",
expect: "2024-07-25T10:00:00-07:00",
},
{
name: "next-friday same dow",
dateLabel: "next-friday",
whenLocal: "2024-07-19T10:00:00 America/Los_Angeles",
expect: "2024-07-26T10:00:00-07:00",
},
{
name: "next-saturday same dow",
dateLabel: "next-saturday",
whenLocal: "2024-07-20T10:00:00 America/Los_Angeles",
expect: "2024-07-27T10:00:00-07:00",
},
// Errors
{
name: "check error date",
dateLabel: "asd",
whenLocal: defaultLocal,
expectError: true,
},
}
for _, tc := range tcs {
t.Run(tc.name, func(t *testing.T) {
w := defaultUtc
if tc.whenLocal != "" {
w = tc.whenLocal
}
w := tc.whenLocal
ws := strings.Split(w, " ")
wd, err := time.Parse("2006-01-02T15:04:05", ws[0])
if err != nil {
Expand Down

0 comments on commit 9aa0ad0

Please sign in to comment.