🚸 (results) Improve time filter so that it takes into account user timezone

This commit is contained in:
Baptiste Arnaud
2024-03-15 10:13:46 +01:00
parent 001e696bf6
commit f6d2b15a16
10 changed files with 291 additions and 153 deletions

View File

@@ -1,18 +1,72 @@
import { timeFilterValues } from '../constants'
import {
startOfDay,
subDays,
startOfYear,
startOfMonth,
endOfMonth,
subMonths,
} from 'date-fns'
import { utcToZonedTime, zonedTimeToUtc } from 'date-fns-tz'
export const parseFromDateFromTimeFilter = (
timeFilter: (typeof timeFilterValues)[number],
userTimezone: string = 'UTC'
): Date | null => {
const nowInUserTimezone = utcToZonedTime(new Date(), userTimezone)
export const parseDateFromTimeFilter = (
timeFilter: (typeof timeFilterValues)[number]
): Date | undefined => {
switch (timeFilter) {
case 'today':
return new Date(new Date().setHours(0, 0, 0, 0))
case 'last7Days':
return new Date(Date.now() - 7 * 24 * 60 * 60 * 1000)
case 'last30Days':
return new Date(Date.now() - 30 * 24 * 60 * 60 * 1000)
case 'yearToDate':
return new Date(new Date().getFullYear(), 0, 1)
case 'today': {
return zonedTimeToUtc(startOfDay(nowInUserTimezone), userTimezone)
}
case 'last7Days': {
return zonedTimeToUtc(
subDays(startOfDay(nowInUserTimezone), 6),
userTimezone
)
}
case 'last30Days': {
return zonedTimeToUtc(
subDays(startOfDay(nowInUserTimezone), 29),
userTimezone
)
}
case 'lastMonth': {
return zonedTimeToUtc(
subMonths(startOfMonth(nowInUserTimezone), 1),
userTimezone
)
}
case 'monthToDate': {
return zonedTimeToUtc(startOfMonth(nowInUserTimezone), userTimezone)
}
case 'yearToDate': {
return zonedTimeToUtc(startOfYear(nowInUserTimezone), userTimezone)
}
case 'allTime':
return
return null
}
}
export const parseToDateFromTimeFilter = (
timeFilter: (typeof timeFilterValues)[number],
userTimezone: string = 'UTC'
): Date | null => {
const nowInUserTimezone = utcToZonedTime(new Date(), userTimezone)
switch (timeFilter) {
case 'lastMonth': {
return zonedTimeToUtc(
subMonths(endOfMonth(nowInUserTimezone), 1),
userTimezone
)
}
case 'last30Days':
case 'last7Days':
case 'today':
case 'monthToDate':
case 'yearToDate':
case 'allTime':
return null
}
}