diff --git a/core/expression/src/vm/date/mod.rs b/core/expression/src/vm/date/mod.rs index 225c2709..1c93b84e 100644 --- a/core/expression/src/vm/date/mod.rs +++ b/core/expression/src/vm/date/mod.rs @@ -312,10 +312,10 @@ mod helper { DurationUnit::Hour => date_time.with_minute(59)?.with_second(59)?, DurationUnit::Day => date_time.with_hour(23)?.with_minute(59)?.with_second(59)?, DurationUnit::Week => { - let weekday = date_time.weekday().num_days_from_sunday(); + let days_until_sunday = 6 - date_time.weekday().num_days_from_monday(); date_time - .checked_add_days(Days::new(weekday.to_u64()?))? + .checked_add_days(Days::new(days_until_sunday.to_u64()?))? .with_hour(23)? .with_minute(59)? .with_second(59)? diff --git a/core/expression/tests/data/date.csv b/core/expression/tests/data/date.csv index e39a89e5..ecb0ab8d 100644 --- a/core/expression/tests/data/date.csv +++ b/core/expression/tests/data/date.csv @@ -94,13 +94,21 @@ d().isSame(d(), 'day');;true d('2023-10-15').startOf('day');;'2023-10-15T00:00:00Z' d('2023-10-15T10:30:45Z').startOf('hour');;'2023-10-15T10:00:00Z' d('2023-10-15').endOf('day');;'2023-10-15T23:59:59Z' +d('2024-01-15').startOf('day');;'2024-01-15T00:00:00Z' +d('2024-01-15').endOf('day');;'2024-01-15T23:59:59Z' d('2023-10-15T10:30:45Z').endOf('hour');;'2023-10-15T10:59:59Z' d('2023-10-15').startOf('month');;'2023-10-01T00:00:00Z' d('2023-10-15').endOf('month');;'2023-10-31T23:59:59Z' +d('2024-01-15').startOf('month');;'2024-01-01T00:00:00Z' +d('2024-01-15').endOf('month');;'2024-01-31T23:59:59Z' d('2023-10-15').startOf('year');;'2023-01-01T00:00:00Z' d('2023-10-15').endOf('year');;'2023-12-31T23:59:59Z' +d('2024-01-15').startOf('year');;'2024-01-01T00:00:00Z' +d('2024-01-15').endOf('year');;'2024-12-31T23:59:59Z' d('2023-10-15').startOf('week');;'2023-10-09T00:00:00Z' d('2023-10-15').endOf('week');;'2023-10-15T23:59:59Z' +d('2024-01-15').startOf('week');;'2024-01-15T00:00:00Z' +d('2024-01-15').endOf('week');;'2024-01-21T23:59:59Z' d('2023-10-15').startOf('quarter');;'2023-10-01T00:00:00Z' d('2023-10-15').endOf('quarter');;'2023-12-31T23:59:59Z' d('2023-03-15').startOf('quarter');;'2023-01-01T00:00:00Z' @@ -109,6 +117,8 @@ d('2023-06-15').startOf('quarter');;'2023-04-01T00:00:00Z' d('2023-06-15').endOf('quarter');;'2023-06-30T23:59:59Z' d('2023-09-15').startOf('quarter');;'2023-07-01T00:00:00Z' d('2023-09-15').endOf('quarter');;'2023-09-30T23:59:59Z' +d('2024-05-15').startOf('quarter');;'2024-04-01T00:00:00Z' +d('2024-05-15').endOf('quarter');;'2024-06-30T23:59:59Z' # Timezone operations d('2023-10-15T00:00:00Z').tz('America/New_York');;'2023-10-14T20:00:00-04:00' @@ -240,4 +250,4 @@ max([d('2023-01-31'), d('2023-02-28'), d('2023-03-31')]);;'2023-03-31T00:00:00Z' min([d('2023-10-15').add(1, 'd'), d('2023-10-15').sub(1, 'd'), d('2023-10-15')]);;'2023-10-14T00:00:00Z' max([d('2023-10-15').add(1, 'd'), d('2023-10-15').sub(1, 'd'), d('2023-10-15')]);;'2023-10-16T00:00:00Z' min([d('2023-01-01'), d('2023-12-31')]).isBefore(d('2023-06-01'));;true -max([d('2023-01-01'), d('2023-12-31')]).isAfter(d('2023-06-01'));;true \ No newline at end of file +max([d('2023-01-01'), d('2023-12-31')]).isAfter(d('2023-06-01'));;true