All checks were successful
Deploy eCourt Note Web to Server / Validate Database Schema (Drizzle) (push) Successful in 3s
Deploy eCourt Note Web to Server / Build Web Docker Image (push) Successful in 43s
Deploy eCourt Note Web to Server / Deploy eCourt Note Web to Server (push) Successful in 3s
Deploy eCourt Note Web to Server / Notify Deployment Status (push) Successful in 1s
Co-Authored-By: Claude Code <noreply@anthropic.com>
34 lines
2.1 KiB
TypeScript
34 lines
2.1 KiB
TypeScript
/** รูปแบบวันที่-เวลาภาษาไทยสำหรับ UI — เจ้าหน้าที่ศาลอ่านวันที่แบบเต็ม พ.ศ.
|
|
* (ธรรมเนียมเอกสารราชการ) เขียนเองแทน toLocaleDateString("th-TH") เพราะ Intl
|
|
* ไม่แทรกคำว่า "พ.ศ." หน้าปี และ format ต้องคงที่ทุก browser/ICU */
|
|
|
|
const THAI_MONTHS = [
|
|
"มกราคม",
|
|
"กุมภาพันธ์",
|
|
"มีนาคม",
|
|
"เมษายน",
|
|
"พฤษภาคม",
|
|
"มิถุนายน",
|
|
"กรกฎาคม",
|
|
"สิงหาคม",
|
|
"กันยายน",
|
|
"ตุลาคม",
|
|
"พฤศจิกายน",
|
|
"ธันวาคม",
|
|
] as const;
|
|
|
|
/**
|
|
* วันที่ → ไทยแบบเต็ม: "18 กันยายน พ.ศ. 2569" · withTime = ต่อท้ายเวลา "… 16:33:00 น."
|
|
* รับทั้ง ISO string (DTO ที่ส่งข้าม server→client — invariant #5) และ Date object
|
|
* (server component ที่อ่าน row จาก DB ตรง ๆ เช่นหน้ารายการไฟล์)
|
|
* แปลงตามเวลาท้องถิ่นของเครื่องที่ render (ค่าใน DB เป็น timestamptz) —
|
|
* วันที่เดียวกันจึงอาจต่างกันตามเครื่องแต่ละคน ให้คง suppressHydrationWarning
|
|
* ไว้ตามจุดที่ render ผ่าน server เดิม
|
|
*/
|
|
export function formatThaiDate(input: string | Date, withTime = false): string {
|
|
const d = input instanceof Date ? input : new Date(input);
|
|
const date = `${d.getDate()} ${THAI_MONTHS[d.getMonth()]} พ.ศ. ${d.getFullYear() + 543}`;
|
|
if (!withTime) return date;
|
|
const pad = (n: number) => String(n).padStart(2, "0");
|
|
return `${date} ${pad(d.getHours())}:${pad(d.getMinutes())}:${pad(d.getSeconds())} น.`;
|
|
}
|