diff --git a/resources/js/utils/format.ts b/resources/js/utils/format.ts index 9c2084c..9e34f94 100644 --- a/resources/js/utils/format.ts +++ b/resources/js/utils/format.ts @@ -21,18 +21,15 @@ export const formatCurrency = (num: number): string => { */ export const formatDate = (date: string): string => { if (!date) return "-"; + // Assume date format is YYYY-MM-DD or YYYY-MM-DD HH:mm:ss const datePart = date.split("T")[0].split(" ")[0]; - const parts = datePart.split("-").map(Number); - if (parts.length < 3 || parts.some(isNaN)) return date; - - const [y, m, d] = parts; - // Initialize at noon to avoid timezone shifting issues - const dt = new Date(y, m - 1, d, 12, 0, 0); - const year = dt.getFullYear(); - const month = String(dt.getMonth() + 1).padStart(2, "0"); - const day = String(dt.getDate()).padStart(2, "0"); - - return `${year}/${month}/${day}`; + // Directly return the parsed string components to guarantee no timezone shift + const parts = datePart.split("-"); + if (parts.length === 3) { + return `${parts[0]}/${parts[1]}/${parts[2]}`; + } + // Fallback for unexpected formats + return datePart.replace(/-/g, "/"); }; /** @@ -41,18 +38,19 @@ export const formatDate = (date: string): string => { export const formatDateWithDayOfWeek = (date: string): string => { if (!date) return "-"; const datePart = date.split("T")[0].split(" ")[0]; - const parts = datePart.split("-").map(Number); - if (parts.length < 3 || parts.some(isNaN)) return date; + const parts = datePart.split("-"); - const [y, m, d] = parts; - // Initialize at noon to avoid timezone shifting issues - const dt = new Date(y, m - 1, d, 12, 0, 0); - const year = dt.getFullYear(); - const month = String(dt.getMonth() + 1).padStart(2, "0"); - const day = String(dt.getDate()).padStart(2, "0"); - const weekDay = dt.toLocaleDateString("zh-TW", { weekday: "short" }); + if (parts.length === 3) { + const [y, m, d] = parts.map(Number); + // Use noon to safely calculate the day of week + const dt = new Date(y, m - 1, d, 12, 0, 0); + const weekDay = dt.toLocaleDateString("zh-TW", { weekday: "short" }); - return `${year}/${month}/${day} (${weekDay})`; + // Return original string parts + calculated weekday + return `${parts[0]}/${parts[1]}/${parts[2]} (${weekDay})`; + } + + return datePart.replace(/-/g, "/"); }; /**