37 lines
1.2 KiB
TypeScript
37 lines
1.2 KiB
TypeScript
// composables/usePersianDate.ts
|
|
import { format } from "date-fns-jalali";
|
|
import { faIR } from "date-fns-jalali/locale";
|
|
import { Jalali } from "jalali-ts";
|
|
|
|
export default function usePersianDate() {
|
|
const formatToPersian = (isoDate: string): string => {
|
|
try {
|
|
const yearStr = isoDate.slice(0, 4);
|
|
const year = Number(yearStr);
|
|
|
|
// jDateTimeField from django_jalali sends Jalali years (13XX/14XX).
|
|
// Normal DateTimeField sends Gregorian (19XX/20XX). Detect by year
|
|
// and use jalali-ts to convert when needed — date-fns-jalali's
|
|
// parseISO doesn't actually do calendar conversion.
|
|
const date =
|
|
!Number.isNaN(year) && year < 1700
|
|
? Jalali.parse(isoDate).date
|
|
: new Date(isoDate);
|
|
|
|
if (isNaN(date.getTime())) return "Invalid date";
|
|
|
|
const persianDate = format(date, "yyyy/MM/dd", { locale: faIR });
|
|
|
|
const persianTime = format(date, "HH:mm", { locale: faIR });
|
|
|
|
return `${persianDate} | ${persianTime}`;
|
|
} catch (error) {
|
|
return "Invalid date";
|
|
}
|
|
};
|
|
|
|
return {
|
|
formatToPersian,
|
|
};
|
|
}
|