This commit is contained in:
Suvodip
2025-04-04 19:21:24 +05:30
parent d01b0aaa2a
commit 96a027dafb
17 changed files with 4005 additions and 2540 deletions

37
src/lib/localizeTime.tsx Normal file
View File

@@ -0,0 +1,37 @@
export function localizeTime(timeValue: string, targetTimeZone?: string): string {
// 1. Auto-detect user's timezone if none provided
if (!targetTimeZone) {
targetTimeZone = Intl.DateTimeFormat().resolvedOptions().timeZone;
}
// 2. Format the date in the target timezone
const date = new Date(timeValue.replace(' ', 'T') + 'Z'); // Ensure UTC
const formatter = new Intl.DateTimeFormat('en-US', {
timeZone: targetTimeZone,
year: 'numeric',
month: '2-digit',
day: '2-digit',
hour: '2-digit',
minute: '2-digit',
second: '2-digit',
hour12: false
});
const [
{ value: month },,
{ value: day },,
{ value: year },,
{ value: hour },,
{ value: minute },,
{ value: second }
] = formatter.formatToParts(date);
return `${year}-${month}-${day} ${hour}:${minute}:${second}`;
}
// Usage:
// const localTime = localizeTime(ticket.created_at); // Auto-detects timezone
// console.log(localTime); // "2025-04-03 20:14:50" (in user's local time)
// const timeInTokyo = localizeTime(ticket.created_at, "Asia/Tokyo");
// console.log(timeInTokyo); // "2025-04-04 05:14:50" (Tokyo time)

View File

@@ -4,3 +4,9 @@ import { twMerge } from 'tailwind-merge';
export function cn(...inputs: ClassValue[]) {
return twMerge(clsx(inputs));
}
// Type helpers
export type MergeElementProps<
T extends React.ElementType,
P extends object = {}
> = Omit<React.ComponentPropsWithRef<T>, keyof P> & P;