diff --git a/web/src/lib/components/photos-page/asset-date-group.svelte b/web/src/lib/components/photos-page/asset-date-group.svelte index 94b9a2fdda..c175247615 100644 --- a/web/src/lib/components/photos-page/asset-date-group.svelte +++ b/web/src/lib/components/photos-page/asset-date-group.svelte @@ -4,7 +4,12 @@ import Skeleton from '$lib/components/photos-page/skeleton.svelte'; import { AssetBucket, type AssetStore, type Viewport } from '$lib/stores/assets-store.svelte'; import { navigate } from '$lib/utils/navigation'; - import { findTotalOffset, type DateGroup, type ScrollTargetListener } from '$lib/utils/timeline-util'; + import { + findTotalOffset, + type DateGroup, + type ScrollTargetListener, + getDateLocaleString, + } from '$lib/utils/timeline-util'; import type { AssetResponseDto } from '@immich/sdk'; import { mdiCheckCircle, mdiCircleOutline } from '@mdi/js'; import { onDestroy } from 'svelte'; @@ -167,7 +172,7 @@ {/if} - + {dateGroup.groupTitle} diff --git a/web/src/lib/utils/timeline-util.ts b/web/src/lib/utils/timeline-util.ts index eb17be61a8..d017fb0c9e 100644 --- a/web/src/lib/utils/timeline-util.ts +++ b/web/src/lib/utils/timeline-util.ts @@ -4,7 +4,7 @@ import { emptyGeometry, type CommonJustifiedLayout } from '$lib/utils/layout-uti import type { AssetResponseDto } from '@immich/sdk'; import { groupBy, memoize, sortBy } from 'lodash-es'; -import { DateTime } from 'luxon'; +import { DateTime, type LocaleOptions } from 'luxon'; import { get } from 'svelte/store'; export type DateGroup = { @@ -40,13 +40,6 @@ export const fromLocalDateTime = (localDateTime: string) => export const fromDateTimeOriginal = (dateTimeOriginal: string, timeZone: string) => DateTime.fromISO(dateTimeOriginal, { zone: timeZone }); -export const groupDateFormat: Intl.DateTimeFormatOptions = { - weekday: 'short', - month: 'short', - day: 'numeric', - year: 'numeric', -}; - export function formatGroupTitle(_date: DateTime): string { if (!_date.isValid) { return _date.toString(); @@ -78,14 +71,17 @@ export function formatGroupTitle(_date: DateTime): string { }); } - return date.toLocaleString(groupDateFormat); + return getDateLocaleString(date); } +export const getDateLocaleString = (date: DateTime, opts?: LocaleOptions): string => + date.toLocaleString(DateTime.DATE_MED_WITH_WEEKDAY, opts); + const formatDateGroupTitle = memoize(formatGroupTitle); export function splitBucketIntoDateGroups(bucket: AssetBucket, locale: string | undefined): DateGroup[] { const grouped = groupBy(bucket.assets, (asset) => - fromLocalDateTime(asset.localDateTime).toLocaleString(groupDateFormat, { locale }), + getDateLocaleString(fromLocalDateTime(asset.localDateTime), { locale }), ); const sorted = sortBy(grouped, (group) => bucket.assets.indexOf(group[0])); return sorted.map((group) => {