diff --git a/apps/web/src/app/register/page.tsx b/apps/web/src/app/register/page.tsx index 33fdce37..8d8f601e 100644 --- a/apps/web/src/app/register/page.tsx +++ b/apps/web/src/app/register/page.tsx @@ -6,6 +6,7 @@ import { Card } from "@/components/ui/card"; import { Separator } from "@/components/ui/separator"; import { Skeleton } from "@/components/ui/skeleton"; import { TextScramble } from "@/components/ui/text-scramble"; +import { calculateTimeLeft } from "@/libs/date"; import { fetchQuery } from "@/libs/server/client"; import { Mail } from "lucide-react"; import Image from "next/image"; @@ -73,10 +74,17 @@ function RegisterPage() {

ข้อมูลส่วนบุคคล

- {`เหลือเวลาอีก ${Math.ceil( - (new Date("2025-03-13").getTime() - new Date().getTime()) / - (1000 * 60 * 60 * 24), - )} วัน`} + {(() => { + const { isLate, daysLeft, hoursLeft } = calculateTimeLeft( + new Date("2025-03-13T23:59:59+07:00"), + ); + + if (isLate) return "หมดเขตรับสมัครแล้ว"; + + return daysLeft > 0 + ? `เหลือเวลาอีก ${daysLeft} วัน` + : `เหลือเวลาอีก ${hoursLeft} ชั่วโมง`; + })()}
diff --git a/apps/web/src/components/navigate/navbar.tsx b/apps/web/src/components/navigate/navbar.tsx index 76cfa2d7..0fad337d 100644 --- a/apps/web/src/components/navigate/navbar.tsx +++ b/apps/web/src/components/navigate/navbar.tsx @@ -11,6 +11,7 @@ import { DrawerTitle, DrawerTrigger, } from "@/components/ui/drawer"; +import { calculateTimeLeft } from "@/libs/date"; import { ReactNode } from "react"; import { TextShimmerWave } from "../text/text-shimmer-wave"; import { Banner } from "../ui/banner"; @@ -69,13 +70,14 @@ export default function Navbar({ items, extra }: NavbarProps) { className="cursor-pointer text-base font-medium transition-colors [--base-color:var(--color-vermilion)] [--base-gradient-color:var(--color-vermilion-1)] dark:[--base-color:var(--color-vermilion)] dark:[--base-gradient-color:var(--color-vermilion-1)]" > {(() => { - const daysLeft = Math.floor( - (new Date("2025-03-14T00:00:00+07:00").getTime() - - Date.now()) / - (1000 * 60 * 60 * 24), + const { isLate, daysLeft } = calculateTimeLeft( + new Date("2025-03-13T23:59:59+07:00"), ); + + if (isLate) return "หมดเขตรับสมัครแล้ว"; + return daysLeft > 0 - ? `เหลือเวลาอีก ${daysLeft.toString()} วันจะหมดเขตรับสมัครแล้วนะ รีบสมัครเลย!` + ? `เหลือเวลาอีก ${daysLeft} วันจะหมดเขตรับสมัครแล้วนะ รีบสมัครเลย!` : "เหลือเวลาอีกไม่ถึง 1 วันแล้วนะ รีบสมัครเลย! (ปิดรับสมัครเวลา 23:59:59)"; })()} diff --git a/apps/web/src/libs/date.ts b/apps/web/src/libs/date.ts index 89c65ee6..f36cd0bb 100644 --- a/apps/web/src/libs/date.ts +++ b/apps/web/src/libs/date.ts @@ -35,3 +35,18 @@ export function getAcademicYearFormDate(date: Date) { return year + 543; } } + +export function calculateTimeLeft(target: Date) { + const now = new Date(); + const diffMs = target.getTime() - now.getTime(); + const isLate = diffMs < 0; + + const days = Math.floor(diffMs / (1000 * 60 * 60 * 24)); + const hours = Math.floor((diffMs % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60)); + + return { + isLate, + daysLeft: days, + hoursLeft: hours, + }; +}