1- import { formatTimestamp , formatTimestampRelative } from "@/common/date" ;
1+ import { formatters as dateFormatters , formatTimestamp , formatTimestampRelative } from "@/common/date" ;
2+ import { Temporal } from "temporal-polyfill" ;
23import {
34 createEffect ,
45 createMemo ,
@@ -14,7 +15,6 @@ import { Modal } from "../ui/modal";
1415import { addReminder } from "@/chat-api/services/ReminderService" ;
1516import { Message } from "@/chat-api/store/useMessages" ;
1617import Text from "../ui/Text" ;
17- import { WorldTimezones } from "@/common/WorldTimezones" ;
1818import { t } from "@nerimity/i18lite" ;
1919
2020export enum TimestampType {
@@ -31,38 +31,24 @@ export function TimestampMention(props: {
3131 const { createPortal } = useCustomPortal ( ) ;
3232 const [ formattedTime , setFormattedTime ] = createSignal ( "..." ) ;
3333
34- const isValidTimezone = createMemo ( ( ) => {
35- return WorldTimezones . includes ( props . timestamp as unknown as string ) ;
36- } ) ;
37-
3834 const updateTime = ( ) => {
3935 if ( props . type === TimestampType . RELATIVE ) {
4036 return setFormattedTime ( formatTimestampRelative ( props . timestamp ) ) ;
4137 }
4238 if ( props . type === TimestampType . OFFSET ) {
4339 const offset = props . timestamp as unknown as string ;
44-
45- if ( isValidTimezone ( ) ) {
46- const date = new Date ( ) . toLocaleString ( "en-GB" , { timeZone : offset } ) ;
47- return setFormattedTime ( date . split ( "," ) [ 1 ] ?. trim ( ) || "..." ) ;
40+ try {
41+ const datetime = Temporal . Now . zonedDateTimeISO ( offset )
42+ . round ( {
43+ smallestUnit : "second" ,
44+ roundingMode : "floor" ,
45+ } ) ;
46+ const formatted = dateFormatters ( ) . datetime . seconds
47+ . format ( datetime . toPlainTime ( ) ) ;
48+ return setFormattedTime ( formatted ) ;
49+ } catch {
50+ return setFormattedTime ( t ( "datetime.invalidTimezone" ) ) ;
4851 }
49- const offsetSign = offset [ 0 ] as "+" | "-" ;
50- const offsetHours = Number ( offsetSign + offset . slice ( 1 , 3 ) ) ;
51- const offsetMinutes = Number ( offsetSign + offset . slice ( 3 , 6 ) ) ;
52-
53- const date = new Date ( ) ;
54- const utcDate = new Date (
55- date . getUTCFullYear ( ) ,
56- date . getUTCMonth ( ) ,
57- date . getUTCDate ( ) ,
58- date . getUTCHours ( ) ,
59- date . getUTCMinutes ( ) ,
60- date . getUTCSeconds ( )
61- ) ;
62-
63- utcDate . setMinutes ( utcDate . getMinutes ( ) + offsetMinutes ) ;
64- utcDate . setHours ( utcDate . getHours ( ) + offsetHours ) ;
65- setFormattedTime ( formatTimestamp ( utcDate . getTime ( ) , true ) ) ;
6652 }
6753 } ;
6854
0 commit comments