diff --git a/resources/js/components/inputs/date-picker.tsx b/resources/js/components/inputs/date-picker.tsx index c310257..93050a9 100644 --- a/resources/js/components/inputs/date-picker.tsx +++ b/resources/js/components/inputs/date-picker.tsx @@ -39,12 +39,17 @@ function DatePicker({ const date = React.useMemo(() => { if (!value) { -return undefined; -} + return undefined; + } if (value instanceof Date) { -return value; -} + return value; + } + + if (typeof value === 'string' && /^\d{4}-\d{2}-\d{2}$/.test(value)) { + const [year, month, day] = value.split('-').map(Number); + return new Date(year, month - 1, day); + } return new Date(value); }, [value]); diff --git a/resources/js/pages/admin/analysis/index.tsx b/resources/js/pages/admin/analysis/index.tsx index 9aecbf2..fbcd6bc 100644 --- a/resources/js/pages/admin/analysis/index.tsx +++ b/resources/js/pages/admin/analysis/index.tsx @@ -14,6 +14,7 @@ import { import { useCan } from '@/hooks/use-can'; import { generateRandomColors } from '@/lib/utils'; import { formatRupiah } from '@/lib/rupiah'; +import { format } from 'date-fns'; import { Head, router } from '@inertiajs/react'; import { Banknote, @@ -415,7 +416,7 @@ export default function Analysis({ const hasActiveFilters = !!startDate || !!endDate; - const formatDate = useCallback((date: Date): string => date.toISOString().split('T')[0], []); + const formatDate = useCallback((date: Date): string => format(date, 'yyyy-MM-dd'), []); const applyFilters = useCallback(() => { router.get( @@ -932,7 +933,8 @@ export default function Analysis({ tickMargin={8} minTickGap={32} tickFormatter={(value) => { - const date = new Date(value); + const [year, month, day] = String(value).split('-').map(Number); + const date = new Date(year, month - 1, day); return date.toLocaleDateString('id-ID', { day: 'numeric', month: 'short' }); }} /> @@ -943,7 +945,9 @@ export default function Analysis({ className="w-[150px]" nameKey="views" labelFormatter={(value) => { - return new Date(value).toLocaleDateString('id-ID', { day: 'numeric', month: 'short', year: 'numeric' }); + const [year, month, day] = String(value).split('-').map(Number); + const date = new Date(year, month - 1, day); + return date.toLocaleDateString('id-ID', { day: 'numeric', month: 'short', year: 'numeric' }); }} formatter={(value, name, item, index) => ( <> diff --git a/resources/js/pages/admin/hr/attendance/index.tsx b/resources/js/pages/admin/hr/attendance/index.tsx index 104b4c8..4a02e2a 100644 --- a/resources/js/pages/admin/hr/attendance/index.tsx +++ b/resources/js/pages/admin/hr/attendance/index.tsx @@ -470,7 +470,8 @@ export default function AttendanceIndex({ const todayMidnight = new Date(); todayMidnight.setHours(0, 0, 0, 0); - const cellDate = new Date(cell.date); + const [cYear, cMonth, cDay] = String(cell.date).split('-').map(Number); + const cellDate = new Date(cYear, cMonth - 1, cDay); cellDate.setHours(0, 0, 0, 0); const isPastDate = cellDate < todayMidnight;