"use client"; import { useEffect, useMemo, useState } from "react"; import { formatLunarLabel, formatSolarLabel, lunarToSolarYmd, solarYmdToLunarParts, todayLunarParts, todaySolarYmd, type LunarDateParts, } from "@/lib/calc/lunar-date"; interface LunarBirthPickerProps { solarDate: string; time: string; onSolarDateChange: (solarYmd: string) => void; onTimeChange: (time: string) => void; label?: string; timeDisabled?: boolean; } const inputClass = "rounded-md border bg-background px-3 py-2 text-sm disabled:opacity-50"; export default function LunarBirthPicker({ solarDate, time, onSolarDateChange, onTimeChange, label = "出生日期 / 时间", timeDisabled = false, }: LunarBirthPickerProps) { const [lunar, setLunar] = useState(() => { return solarYmdToLunarParts(solarDate) ?? todayLunarParts(); }); useEffect(() => { const parsed = solarYmdToLunarParts(solarDate); if (parsed) { setLunar(parsed); } }, [solarDate]); const solarYmd = useMemo(() => lunarToSolarYmd(lunar), [lunar]); const lunarLabel = useMemo(() => formatLunarLabel(lunar), [lunar]); const solarLabel = useMemo( () => (solarYmd ? formatSolarLabel(solarYmd) : null), [solarYmd], ); useEffect(() => { if (solarYmd && solarYmd !== solarDate) { onSolarDateChange(solarYmd); } }, [solarYmd, solarDate, onSolarDateChange]); function updateLunar(patch: Partial) { setLunar((prev) => ({ ...prev, ...patch })); } return (

请按农历(阴历)填写出生日期

农历年 updateLunar({ year: Number(e.target.value) })} />
农历月 updateLunar({ month: Number(e.target.value) })} />
农历日 updateLunar({ day: Number(e.target.value) })} />
{lunarLabel && (

农历:{lunarLabel}

)} {solarLabel ? (

对应阳历:{solarLabel} ({solarYmd})

) : (

农历日期无效,请检查年月日或闰月

)}
出生时辰 onTimeChange(e.target.value)} />
); } export { todaySolarYmd };