-
Notifications
You must be signed in to change notification settings - Fork 19
/
date.tsx
53 lines (39 loc) · 1.99 KB
/
date.tsx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
import { differenceInMinutes, formatDistanceToNowStrict } from 'date-fns'
import { format, utcToZonedTime } from 'date-fns-tz'
export const timeAgo = (date: Date) => formatDistanceToNowStrict(date)
export const dateDifferenceMinutes = (firstDate?: Date, secondDate?: Date) => {
return firstDate && secondDate && differenceInMinutes(firstDate, secondDate)
}
const addZero = (time: number) => (time < 10 ? `0${time}` : time)
export function dateDifference(firstDate: Date, secondDate: Date) {
let difference = new Date(firstDate).getTime() - new Date(secondDate).getTime()
const daysDifference = Math.floor(difference / 1000 / 60 / 60 / 24)
difference -= daysDifference * 1000 * 60 * 60 * 24
const hoursDifference = Math.floor(difference / 1000 / 60 / 60)
difference -= hoursDifference * 1000 * 60 * 60
const minutesDifference = Math.floor(difference / 1000 / 60)
difference -= minutesDifference * 1000 * 60
const secondsDifference = Math.floor(difference / 1000)
return `${addZero(hoursDifference)}:${addZero(minutesDifference)}:${addZero(secondsDifference)}`
}
const formatInTimeZone = (date: Date, fmt: string, tz: string) =>
format(utcToZonedTime(date, tz), fmt, { timeZone: tz })
// 10:10
export const dateToHours = (date: string) => {
const d = new Date(date)
return `${addZero(d.getUTCHours())}:${addZero(d.getUTCMinutes())}`
}
// 2022-09-10 10:10:20
export function dateYearMonthDayHourMinuteSecond(date: Date, withTime = true) {
return `${date.getFullYear()}-${date.getMonth() + 1}-${date.getDate()} ${
withTime ? `${date.getHours()}:${date.getMinutes()}:${date.getSeconds()}` : ''
} `
}
// 15 Sep, 10:23:20:20
export const dateFullFormat = (date: string, timeZone?: string) => {
const localTimeZone = Intl.DateTimeFormat().resolvedOptions().timeZone
return formatInTimeZone(new Date(date), 'dd MMM, HH:mm:ss:SS', timeZone ? timeZone : localTimeZone)
}
export const dateToFormat = (date: string, format: string) => {
return formatInTimeZone(new Date(date), format, 'UTC')
}