11import clsx from 'clsx'
22import { HOUR_MS } from 'common/util/time'
33import dayjs from 'dayjs'
4- import { capitalize } from 'lodash'
54import Link from 'next/link'
65import { Event } from 'web/hooks/use-events'
76import { useUser } from 'web/hooks/use-user'
87import { useLocale , useT } from 'web/lib/locale'
9- import { formatTimeShort , fromNow } from 'web/lib/util/time'
8+ import { capitalizePure , formatTimeShort , fromNow } from 'web/lib/util/time'
109
1110import { UserLink , UserLinkFromId } from './user-link'
1211
@@ -26,7 +25,8 @@ export function EventCard(props: {
2625 const isRsvped = user && event . participants . includes ( user . id )
2726 const isMaybe = user && event . maybe . includes ( user . id )
2827 const isCreator = user && event . creator_id === user . id
29- const isPast = new Date ( event . event_start_time ) < new Date ( )
28+ const start = new Date ( event . event_start_time )
29+ const isPast = start < new Date ( )
3030
3131 const formattedDate = formatTimeShort ( event . event_start_time , locale )
3232 const formattedEnd =
@@ -36,10 +36,22 @@ export function EventCard(props: {
3636 locale ,
3737 dayjs ( event . event_end_time ) . isSame ( event . event_start_time , 'day' ) ,
3838 )
39+
40+ const timeZone = Intl . DateTimeFormat ( ) . resolvedOptions ( ) . timeZone
41+ const longFormatter = new Intl . DateTimeFormat ( locale , {
42+ timeZone,
43+ timeZoneName : 'long' ,
44+ } )
45+ const offsetFormatter = new Intl . DateTimeFormat ( locale , {
46+ timeZone,
47+ timeZoneName : 'longOffset' , // gives "GMT+5:30", "GMT-5:00", etc.
48+ } )
49+ const longName = longFormatter . formatToParts ( start ) . find ( ( p ) => p . type === 'timeZoneName' ) ?. value
50+ const offset = offsetFormatter . formatToParts ( start ) . find ( ( p ) => p . type === 'timeZoneName' ) ?. value
51+ const timezone = `${ longName } (${ offset } )`
52+
3953 let timeAgo = fromNow ( event . event_start_time , false , t , locale )
40- const assumedEnd = new Date (
41- event . event_end_time ?? new Date ( event . event_start_time ) . getTime ( ) + 24 * HOUR_MS ,
42- )
54+ const assumedEnd = new Date ( event . event_end_time ?? start . getTime ( ) + 24 * HOUR_MS )
4355 if ( isPast && assumedEnd > new Date ( ) )
4456 timeAgo = t ( 'events.started' , 'Started {time}' , { time : timeAgo } )
4557
@@ -61,9 +73,11 @@ export function EventCard(props: {
6173 { /* Date & Time */ }
6274 < div className = "mb-3" >
6375 < p className = "text-ink-700 font-medium" >
64- { formattedDate } - { formattedEnd }
76+ { capitalizePure ( formattedDate ) } { formattedEnd && '- ' }
77+ { formattedEnd }
6578 </ p >
66- < p className = "text-ink-500 text-sm" > { capitalize ( timeAgo ) } </ p >
79+ < p className = "text-ink-500 text-sm" > { capitalizePure ( timezone ) } </ p >
80+ < p className = "text-ink-500 text-sm" > { capitalizePure ( timeAgo ) } </ p >
6781 </ div >
6882
6983 { /* Description */ }
0 commit comments