diff --git a/src/app/components/message/Time.tsx b/src/app/components/message/Time.tsx index de11cf8961..2fb44f36cf 100644 --- a/src/app/components/message/Time.tsx +++ b/src/app/components/message/Time.tsx @@ -1,6 +1,8 @@ import React from 'react'; import { Text, as } from 'folds'; import { timeDayMonYear, timeHourMinute, today, yesterday } from '../../utils/time'; +import { useSetting } from '../../state/hooks/settings'; +import { settingsAtom } from '../../state/settings'; export type TimeProps = { compact?: boolean; @@ -8,15 +10,19 @@ export type TimeProps = { }; export const Time = as<'span', TimeProps>(({ compact, ts, ...props }, ref) => { + const [hour24Clock] = useSetting(settingsAtom, 'hour24Clock'); + const formattedTime = timeHourMinute(ts, hour24Clock); + let time = ''; + if (compact) { - time = timeHourMinute(ts); + time = formattedTime; } else if (today(ts)) { - time = timeHourMinute(ts); + time = formattedTime; } else if (yesterday(ts)) { - time = `Yesterday ${timeHourMinute(ts)}`; + time = `Yesterday ${formattedTime}`; } else { - time = `${timeDayMonYear(ts)} ${timeHourMinute(ts)}`; + time = `${timeDayMonYear(ts)} ${formattedTime}`; } return ( diff --git a/src/app/components/room-intro/RoomIntro.tsx b/src/app/components/room-intro/RoomIntro.tsx index 863c7cf018..034836909f 100644 --- a/src/app/components/room-intro/RoomIntro.tsx +++ b/src/app/components/room-intro/RoomIntro.tsx @@ -9,6 +9,8 @@ import { useMatrixClient } from '../../hooks/useMatrixClient'; import { getMxIdLocalPart } from '../../utils/matrix'; import { AsyncStatus, useAsyncCallback } from '../../hooks/useAsyncCallback'; import { timeDayMonthYear, timeHourMinute } from '../../utils/time'; +import { useSetting } from '../../state/hooks/settings'; +import { settingsAtom } from '../../state/settings'; export type RoomIntroProps = { room: Room; @@ -36,6 +38,8 @@ export const RoomIntro = as<'div', RoomIntroProps>(({ room, ...props }, ref) => useCallback(async (roomId: string) => mx.joinRoom(roomId), [mx]) ); + const [hour24Clock] = useSetting(settingsAtom, 'hour24Clock'); + return ( @@ -66,7 +70,7 @@ export const RoomIntro = as<'div', RoomIntroProps>(({ room, ...props }, ref) => {'Created by '} @{creatorName} - {` on ${timeDayMonthYear(ts)} ${timeHourMinute(ts)}`} + {` on ${timeDayMonthYear(ts)} ${timeHourMinute(ts, hour24Clock)}`} )} diff --git a/src/app/organisms/settings/Settings.jsx b/src/app/organisms/settings/Settings.jsx index 47abb45c01..3a79fd6e78 100644 --- a/src/app/organisms/settings/Settings.jsx +++ b/src/app/organisms/settings/Settings.jsx @@ -62,6 +62,8 @@ function AppearanceSection() { const [urlPreview, setUrlPreview] = useSetting(settingsAtom, 'urlPreview'); const [encUrlPreview, setEncUrlPreview] = useSetting(settingsAtom, 'encUrlPreview'); const [showHiddenEvents, setShowHiddenEvents] = useSetting(settingsAtom, 'showHiddenEvents'); + const [hour24Clock, setHour24Clock] = useSetting(settingsAtom, 'hour24Clock'); + const spacings = ['0', '100', '200', '300', '400', '500'] return ( @@ -223,6 +225,16 @@ function AppearanceSection() { )} content={Show hidden state and message events.} /> + setHour24Clock(!hour24Clock)} + /> + } + content={Use the 24-hour time format for all timestamps.} + /> ); diff --git a/src/app/state/settings.ts b/src/app/state/settings.ts index 061931ea82..56e7111ef4 100644 --- a/src/app/state/settings.ts +++ b/src/app/state/settings.ts @@ -25,6 +25,8 @@ export interface Settings { showNotifications: boolean; isNotificationSounds: boolean; + + hour24Clock: boolean; } const defaultSettings: Settings = { @@ -48,6 +50,8 @@ const defaultSettings: Settings = { showNotifications: true, isNotificationSounds: true, + + hour24Clock: false, }; export const getSettings = () => { diff --git a/src/app/utils/time.ts b/src/app/utils/time.ts index 3ee6720c05..5a80a9c0ef 100644 --- a/src/app/utils/time.ts +++ b/src/app/utils/time.ts @@ -9,7 +9,8 @@ export const today = (ts: number): boolean => dayjs(ts).isToday(); export const yesterday = (ts: number): boolean => dayjs(ts).isYesterday(); -export const timeHourMinute = (ts: number): string => dayjs(ts).format('hh:mm A'); +export const timeHourMinute = (ts: number, hour24Clock: boolean = false): string => + dayjs(ts).format(hour24Clock ? 'HH:mm' : 'hh:mm A'); export const timeDayMonYear = (ts: number): string => dayjs(ts).format('D MMM YYYY');