Skip to content

Commit 3809ff5

Browse files
Don't clamp time when setting DMY
1 parent 7e13a8d commit 3809ff5

File tree

2 files changed

+31
-7
lines changed

2 files changed

+31
-7
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
# Changelog
22

33
## Next
4+
- Don't clamp time of day when settig date/month/year
45
- Fix time field sometimes showing a value outside `min`/`max`
56
- Fix time field losing highlight after pressing left/right arrow keys
67
- Use numeric keyboard in time field

src/lib/DatePicker.svelte

Lines changed: 30 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,16 @@
2323
}
2424
}
2525
26+
function setValueDate(d: Date) {
27+
if (d.getTime() !== value?.getTime()) {
28+
browseDate = clampDate(d, min, max)
29+
value = cloneDate(browseDate)
30+
}
31+
}
32+
2633
/** Set the browseDate */
2734
function browse(d: Date) {
28-
browseDate = clamp(d, min, max)
35+
browseDate = clampDate(d, min, max)
2936
if (!browseWithoutSelecting && value) {
3037
setValue(browseDate)
3138
}
@@ -64,9 +71,25 @@
6471
return cloneDate(d)
6572
}
6673
}
74+
function clampDate(d: Date, min: Date, max: Date) {
75+
const limit = clamp(d, min, max)
76+
if (limit.getTime() !== d.getTime()) {
77+
d = new Date(
78+
limit.getFullYear(),
79+
limit.getMonth(),
80+
limit.getDate(),
81+
d.getHours(),
82+
d.getMinutes(),
83+
d.getSeconds(),
84+
d.getMilliseconds(),
85+
)
86+
d = clamp(d, min, max)
87+
}
88+
return d
89+
}
6790
6891
/** The date shown in the popup when none is selected */
69-
let browseDate = value ? cloneDate(value) : cloneDate(clamp(defaultDate, min, max))
92+
let browseDate = value ? cloneDate(value) : cloneDate(clampDate(defaultDate, min, max))
7093
$: setBrowseDate(value)
7194
function setBrowseDate(value: Date | null) {
7295
if (browseDate.getTime() !== value?.getTime()) {
@@ -132,7 +155,7 @@
132155
browseDate.setFullYear(calendarDay.year)
133156
browseDate.setMonth(calendarDay.month)
134157
browseDate.setDate(calendarDay.number)
135-
setValue(browseDate)
158+
setValueDate(browseDate)
136159
dispatch('select', cloneDate(browseDate))
137160
}
138161
}
@@ -205,16 +228,16 @@
205228
return
206229
} else if (e.key === 'ArrowUp') {
207230
browseDate.setDate(browseDate.getDate() - 7)
208-
setValue(browseDate)
231+
setValueDate(browseDate)
209232
} else if (e.key === 'ArrowDown') {
210233
browseDate.setDate(browseDate.getDate() + 7)
211-
setValue(browseDate)
234+
setValueDate(browseDate)
212235
} else if (e.key === 'ArrowLeft') {
213236
browseDate.setDate(browseDate.getDate() - 1)
214-
setValue(browseDate)
237+
setValueDate(browseDate)
215238
} else if (e.key === 'ArrowRight') {
216239
browseDate.setDate(browseDate.getDate() + 1)
217-
setValue(browseDate)
240+
setValueDate(browseDate)
218241
} else if (e.key === 'Enter') {
219242
setValue(browseDate)
220243
dispatch('select', cloneDate(browseDate))

0 commit comments

Comments
 (0)