summaryrefslogtreecommitdiff
path: root/internal/reports/daterange.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/reports/daterange.go')
-rw-r--r--internal/reports/daterange.go37
1 files changed, 34 insertions, 3 deletions
diff --git a/internal/reports/daterange.go b/internal/reports/daterange.go
index adeb48b..040023e 100644
--- a/internal/reports/daterange.go
+++ b/internal/reports/daterange.go
@@ -67,16 +67,22 @@ func ParseDateRange(dateStr string) (DateRange, error) {
return dateRange, nil
}
+ // Check for "since YYYY-MM-DD" format
+ if strings.HasPrefix(lowerDateStr, "since ") {
+ return parseSinceDateRange(dateStr)
+ }
+
// Check for custom date range format: "YYYY-MM-DD to YYYY-MM-DD"
- if strings.Contains(dateStr, " to ") {
+ if strings.Contains(lowerDateStr, " to ") {
return parseCustomDateRange(dateStr)
}
- return DateRange{}, fmt.Errorf("unsupported date range: %s (supported: 'this week', 'this month', 'last week', 'last month', month names like 'february', 'month year' like 'july 2023', or 'YYYY-MM-DD to YYYY-MM-DD')", dateStr)
+ return DateRange{}, fmt.Errorf("unsupported date range: %s (supported: 'this week', 'this month', 'last week', 'last month', month names like 'february', 'month year' like 'july 2023', 'since YYYY-MM-DD', or 'YYYY-MM-DD to YYYY-MM-DD')", dateStr)
}
func parseCustomDateRange(dateStr string) (DateRange, error) {
- parts := strings.Split(dateStr, " to ")
+ lowerDateStr := strings.ToLower(dateStr)
+ parts := strings.Split(lowerDateStr, " to ")
if len(parts) != 2 {
return DateRange{}, fmt.Errorf("invalid date range format: expected 'YYYY-MM-DD to YYYY-MM-DD'")
}
@@ -248,3 +254,28 @@ func getMonthRange(year int, month time.Month) DateRange {
}
}
+func parseSinceDateRange(dateStr string) (DateRange, error) {
+ // Remove "since " prefix (case-insensitive)
+ lowerDateStr := strings.ToLower(dateStr)
+ if !strings.HasPrefix(lowerDateStr, "since ") {
+ return DateRange{}, fmt.Errorf("invalid since format: expected 'since YYYY-MM-DD'")
+ }
+
+ dateOnly := strings.TrimSpace(dateStr[6:]) // Remove "since " prefix
+
+ // Parse start date
+ startDate, err := time.Parse("2006-01-02", dateOnly)
+ if err != nil {
+ return DateRange{}, fmt.Errorf("invalid start date '%s' in since format: expected YYYY-MM-DD format", dateOnly)
+ }
+
+ // Convert to UTC and set start time to beginning of day (00:00:00)
+ startUTC := time.Date(startDate.Year(), startDate.Month(), startDate.Day(), 0, 0, 0, 0, time.UTC)
+
+ // No end date for "since" format - return zero time for End to indicate open-ended
+ return DateRange{
+ Start: startUTC,
+ End: time.Time{}, // Zero time indicates no end date
+ }, nil
+}
+