Repository navigation
Expand file tree
/
Copy pathdates.ts
More file actions
79 lines (69 loc) 路 2.39 KB
/
Copy pathdates.ts
File metadata and controls
79 lines (69 loc) 路 2.39 KB
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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
export const utcDateOffsetByDays = (days: number) => {
const date = new Date();
date.setUTCHours(0, 0, 0, 0);
date.setUTCDate(date.getUTCDate() + days);
return date;
};
export const localtimeDateOffsetByDays = (days: number) => {
const date = new Date();
date.setHours(0, 0, 0, 0);
date.setDate(date.getDate() + days);
return date;
};
export const utcDate = (localDateTime: Date) =>
new Date(
Date.UTC(
localDateTime.getFullYear(),
localDateTime.getMonth(),
localDateTime.getDate(),
),
);
export const setBeginningOfDay = (date: Date) => {
date.setHours(0, 0, 0, 0);
return date;
};
export const setEndOfDay = (date: Date) => {
date.setHours(23, 59, 59, 999);
return date;
};
export const intervalInSeconds = (start: Date, end: Date | null) =>
end ? (end.getTime() - start.getTime()) / 1000 : 0;
export const formatIntervalSeconds = (seconds: number, scale: number = 2) => {
const hrs = Math.floor(seconds / 3600);
const mins = Math.floor((seconds % 3600) / 60);
const secs = Math.floor(seconds % 60);
const pad = (num: number) => `00${num}`.slice(2);
if (hrs > 0) return `${hrs}h ${pad(mins)}m ${pad(secs)}s`;
if (mins > 0) return `${mins}m ${pad(secs)}s`;
return `${seconds.toFixed(scale)}s`;
};
export const getShortLocalTimezone = () => {
return new Date()
.toLocaleTimeString("en-us", { timeZoneName: "short" })
.split(" ")[2];
};
export const getTimezoneDetails = () => {
const longLocalTz = Intl.DateTimeFormat().resolvedOptions().timeZone;
const location = longLocalTz.replace(/_/g, " ");
const utcDifference = -(new Date().getTimezoneOffset() / 60); // negative because TZ info is the opposite of UTC offset
return `${location} (UTC${utcDifference >= 0 ? "+" : ""}${utcDifference})`;
};
export const getRelativeTimestampFromNow = (timestamp: Date): string => {
const diffInMs = new Date().getTime() - timestamp.getTime();
const diffInMinutes = diffInMs / (1000 * 60);
const diffInHours = diffInMinutes / 60;
const diffInDays = diffInHours / 24;
if (diffInHours < 1) {
return `${Math.floor(diffInMinutes)} minutes ago`;
} else if (diffInHours < 24) {
return `${Math.floor(diffInHours)} hours ago`;
} else if (diffInDays < 7) {
return `${Math.floor(diffInDays)} days ago`;
} else {
return timestamp.toLocaleDateString("en-US", {
year: "2-digit",
month: "numeric",
day: "numeric",
});
}
};