Merge branch 'fix/datepicker-tz-offset' into 'main'
fix(ui): DatePicker off-by-one в TZ != UTC See merge request 2-6/2-6-4/terravault/ordinis!299
This commit is contained in:
@@ -1,6 +1,7 @@
|
|||||||
import * as React from 'react'
|
import * as React from 'react'
|
||||||
import { Input } from './input'
|
import { Input } from './input'
|
||||||
import { FieldLabel, FieldHint, FieldError } from './field'
|
import { FieldLabel, FieldHint, FieldError } from './field'
|
||||||
|
import { formatIsoDate, parseFormDate } from '@/lib/dates'
|
||||||
import { cn } from '@/lib/utils'
|
import { cn } from '@/lib/utils'
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -32,10 +33,13 @@ export type DatePickerProps = {
|
|||||||
inputClassName?: string
|
inputClassName?: string
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Local-TZ форматирование. toISOString().slice(0,10) на Date в TZ != UTC
|
||||||
|
// даёт day-shift (например, 21.06 MSK → "2026-06-20"), что выглядит как
|
||||||
|
// «picker показывает на день меньше».
|
||||||
const toIso = (v: Date | string | null | undefined): string => {
|
const toIso = (v: Date | string | null | undefined): string => {
|
||||||
if (!v) return ''
|
if (!v) return ''
|
||||||
if (typeof v === 'string') return v.slice(0, 10)
|
if (typeof v === 'string') return v.slice(0, 10)
|
||||||
if (v instanceof Date && !isNaN(v.getTime())) return v.toISOString().slice(0, 10)
|
if (v instanceof Date && !isNaN(v.getTime())) return formatIsoDate(v)
|
||||||
return ''
|
return ''
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -64,8 +68,7 @@ export function DatePicker({
|
|||||||
onChange?.(null)
|
onChange?.(null)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
const d = new Date(raw + 'T00:00:00')
|
onChange?.(parseFormDate(raw))
|
||||||
onChange?.(isNaN(d.getTime()) ? null : d)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
|||||||
Reference in New Issue
Block a user