diff --git a/app/src/panels/time-series/time-series.vue b/app/src/panels/time-series/time-series.vue index cdb034b007..9a5276ba08 100644 --- a/app/src/panels/time-series/time-series.vue +++ b/app/src/panels/time-series/time-series.vue @@ -13,6 +13,7 @@ import { useFieldsStore } from '@/stores'; import { Filter } from '@directus/shared/types'; import { abbreviateNumber } from '@/utils/abbreviate-number'; import { getEndpoint } from '@/utils/get-endpoint'; +import { addWeeks } from 'date-fns'; export default defineComponent({ props: { @@ -180,7 +181,10 @@ export default defineComponent({ function toISO(metric: Record) { const year = metric[`${props.dateField}_year`]; const month = padZero(metric[`${props.dateField}_month`] ?? 1); - const day = padZero(metric[`${props.dateField}_day`] ?? 1); + const week = metric[`${props.dateField}_week`]; + const day = week + ? padZero(getFirstDayOfNWeeksForYear(week, year)) + : padZero(metric[`${props.dateField}_day`] ?? 1); const hour = padZero(metric[`${props.dateField}_hour`] ?? 0); const minute = padZero(metric[`${props.dateField}_minute`] ?? 0); const second = padZero(metric[`${props.dateField}_second`] ?? 0); @@ -190,6 +194,10 @@ export default defineComponent({ function padZero(value: number) { return String(value).padStart(2, '0'); } + + function getFirstDayOfNWeeksForYear(numberOfWeeks: number, year: number) { + return addWeeks(new Date(year, 0, 1), numberOfWeeks).getDate(); + } } function getGroups() { @@ -202,6 +210,9 @@ export default defineComponent({ case 'month': groups = ['year', 'month']; break; + case 'week': + groups = ['year', 'month', 'week']; + break; case 'day': groups = ['year', 'month', 'day']; break;