mirror of
https://github.com/formbricks/formbricks.git
synced 2025-12-30 08:50:17 -06:00
168 lines
3.7 KiB
TypeScript
168 lines
3.7 KiB
TypeScript
import { formatDistance, intlFormat } from "date-fns";
|
|
import { de, enUS, fr, ja, pt, ptBR, ro, zhCN, zhTW } from "date-fns/locale";
|
|
import { TUserLocale } from "@formbricks/types/user";
|
|
|
|
export const convertDateString = (dateString: string | null) => {
|
|
if (dateString === null) return null;
|
|
if (!dateString) {
|
|
return dateString;
|
|
}
|
|
|
|
const date = new Date(dateString);
|
|
if (isNaN(date.getTime())) {
|
|
return "Invalid Date";
|
|
}
|
|
return intlFormat(
|
|
date,
|
|
{
|
|
year: "numeric",
|
|
month: "short",
|
|
day: "numeric",
|
|
},
|
|
{
|
|
locale: "en",
|
|
}
|
|
);
|
|
};
|
|
|
|
export const convertDateTimeString = (dateString: string) => {
|
|
if (!dateString) {
|
|
return dateString;
|
|
}
|
|
const date = new Date(dateString);
|
|
return intlFormat(
|
|
date,
|
|
{
|
|
weekday: "long",
|
|
year: "numeric",
|
|
month: "long",
|
|
day: "numeric",
|
|
hour: "numeric",
|
|
minute: "2-digit",
|
|
},
|
|
{
|
|
locale: "en",
|
|
}
|
|
);
|
|
};
|
|
|
|
export const convertDateTimeStringShort = (dateString: string) => {
|
|
if (!dateString) {
|
|
return dateString;
|
|
}
|
|
const date = new Date(dateString);
|
|
return intlFormat(
|
|
date,
|
|
{
|
|
year: "numeric",
|
|
month: "long",
|
|
day: "numeric",
|
|
hour: "numeric",
|
|
minute: "2-digit",
|
|
},
|
|
{
|
|
locale: "en",
|
|
}
|
|
);
|
|
};
|
|
|
|
export const convertTimeString = (dateString: string) => {
|
|
const date = new Date(dateString);
|
|
return intlFormat(
|
|
date,
|
|
{
|
|
hour: "numeric",
|
|
minute: "2-digit",
|
|
second: "2-digit",
|
|
},
|
|
{
|
|
locale: "en",
|
|
}
|
|
);
|
|
};
|
|
|
|
const getLocaleForTimeSince = (locale: TUserLocale) => {
|
|
switch (locale) {
|
|
case "de-DE":
|
|
return de;
|
|
case "en-US":
|
|
return enUS;
|
|
case "pt-BR":
|
|
return ptBR;
|
|
case "fr-FR":
|
|
return fr;
|
|
case "zh-Hant-TW":
|
|
return zhTW;
|
|
case "pt-PT":
|
|
return pt;
|
|
case "ro-RO":
|
|
return ro;
|
|
case "ja-JP":
|
|
return ja;
|
|
case "zh-Hans-CN":
|
|
return zhCN;
|
|
}
|
|
};
|
|
|
|
export const timeSince = (dateString: string, locale: TUserLocale) => {
|
|
const date = new Date(dateString);
|
|
return formatDistance(date, new Date(), {
|
|
addSuffix: true,
|
|
locale: getLocaleForTimeSince(locale),
|
|
});
|
|
};
|
|
|
|
export const timeSinceDate = (date: Date) => {
|
|
return formatDistance(date, new Date(), {
|
|
addSuffix: true,
|
|
});
|
|
};
|
|
|
|
export const formatDate = (date: Date) => {
|
|
return intlFormat(date, {
|
|
year: "numeric",
|
|
month: "long",
|
|
day: "numeric",
|
|
});
|
|
};
|
|
|
|
export const getTodaysDateFormatted = (seperator: string) => {
|
|
const date = new Date();
|
|
const formattedDate = date.toISOString().split("T")[0].split("-").join(seperator);
|
|
|
|
return formattedDate;
|
|
};
|
|
|
|
export const getTodaysDateTimeFormatted = (seperator: string) => {
|
|
const date = new Date();
|
|
const formattedDate = date.toISOString().split("T")[0].split("-").join(seperator);
|
|
const formattedTime = date.toTimeString().split(" ")[0].split(":").join(seperator);
|
|
|
|
return [formattedDate, formattedTime].join(seperator);
|
|
};
|
|
|
|
export const convertDatesInObject = <T>(obj: T): T => {
|
|
if (obj === null || typeof obj !== "object") {
|
|
return obj; // Return if obj is not an object
|
|
}
|
|
if (Array.isArray(obj)) {
|
|
// Handle arrays by mapping each element through the function
|
|
return obj.map((item) => convertDatesInObject(item)) as unknown as T;
|
|
}
|
|
const newObj: any = {};
|
|
for (const key in obj) {
|
|
if (
|
|
(key === "createdAt" || key === "updatedAt") &&
|
|
typeof obj[key] === "string" &&
|
|
!isNaN(Date.parse(obj[key] as unknown as string))
|
|
) {
|
|
newObj[key] = new Date(obj[key] as unknown as string);
|
|
} else if (typeof obj[key] === "object" && obj[key] !== null) {
|
|
newObj[key] = convertDatesInObject(obj[key]);
|
|
} else {
|
|
newObj[key] = obj[key];
|
|
}
|
|
}
|
|
return newObj;
|
|
};
|