Skip to content

Commit 61197ab

Browse files
Set unused time precision to 0 (#112)
* added functiinality to set unused time precision to 0 * Apply time precision on setValue/setBrowseDate * Update CHANGELOG.md --------- Co-authored-by: Kasper <[email protected]>
1 parent efff6ac commit 61197ab

File tree

6 files changed

+49
-5
lines changed

6 files changed

+49
-5
lines changed

CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
# Changelog
22

3+
## Next
4+
- Fix `timePrecision` not always setting unused values to 0 (@stinger567)
5+
36
## 2.15.1 - 2024 Nov 29
47
- Remove leftover logging statements
58

src/lib/DatePicker.svelte

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
11
<script lang="ts">
22
import TimePicker from './TimePicker.svelte'
3-
import { getMonthLength, getCalendarDays, type CalendarDay } from './date-utils.js'
3+
import {
4+
getMonthLength,
5+
getCalendarDays,
6+
type CalendarDay,
7+
applyTimePrecision,
8+
} from './date-utils.js'
49
import { getInnerLocale, type Locale } from './locale.js'
510
import { createEventDispatcher } from 'svelte'
611
@@ -19,6 +24,7 @@
1924
function setValue(d: Date) {
2025
if (d.getTime() !== value?.getTime()) {
2126
browseDate = clamp(d, min, max)
27+
applyTimePrecision(browseDate, timePrecision)
2228
value = cloneDate(browseDate)
2329
}
2430
}
@@ -94,6 +100,8 @@
94100
function setBrowseDate(value: Date | null) {
95101
if (browseDate.getTime() !== value?.getTime()) {
96102
browseDate = value ? cloneDate(value) : browseDate
103+
// If the value was updated externally, this fixes the time precision
104+
applyTimePrecision(browseDate, timePrecision)
97105
}
98106
}
99107

src/lib/TimePicker.svelte

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
export let setTime: (d: Date) => Date
55
66
let fields: (HTMLSpanElement | undefined | null)[] = []
7-
87
function select(node: Node) {
98
const selection = window.getSelection()
109
const range = document.createRange()

src/lib/date-utils.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,3 +74,17 @@ export function getCalendarDays(value: Date, weekStartsOn: number): CalendarDay[
7474

7575
return days
7676
}
77+
78+
export function applyTimePrecision(
79+
date: Date,
80+
timePrecision: 'minute' | 'second' | 'millisecond' | null,
81+
) {
82+
// Set unused time components to 0
83+
if (timePrecision === null) {
84+
date.setHours(0, 0, 0, 0)
85+
} else if (timePrecision === 'minute') {
86+
date.setSeconds(0, 0)
87+
} else if (timePrecision === 'second') {
88+
date.setMilliseconds(0)
89+
}
90+
}

src/routes/bug/+page.svelte

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,15 @@
11
<script lang="ts">
22
import DatePicker from '$lib/DatePicker.svelte'
33
4-
let min = new Date(2024, 1, 26, 17, 30)
54
let value: Date | undefined
65
</script>
76

8-
<DatePicker timePrecision="minute" {min} bind:value />
7+
<button
8+
on:click={() => {
9+
value = new Date(2025, 3, 19, 11, 11, 11, 111)
10+
}}>Set to precise value</button
11+
>
912

10-
{value}
13+
<DatePicker timePrecision="minute" bind:value />
14+
15+
{value?.toISOString() ?? 'null'}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
<script lang="ts">
2+
import DatePicker from '$lib/DatePicker.svelte'
3+
4+
let value: Date | undefined
5+
</script>
6+
7+
<button
8+
on:click={() => {
9+
value = new Date(2025, 3, 19, 11, 11, 11, 111)
10+
}}>chhh</button
11+
>
12+
13+
<DatePicker timePrecision="minute" bind:value />
14+
15+
{value?.toISOString()}

0 commit comments

Comments
 (0)