mirror of
https://github.com/sky-systems/sky_phone.git
synced 2026-09-04 09:13:24 +00:00
ENH - clock app
This commit is contained in:
@@ -1,9 +1,21 @@
|
||||
import { describe, expect, it } from 'vitest'
|
||||
import { elapsedMilliseconds, remainingMilliseconds } from './clock'
|
||||
import {
|
||||
elapsedMilliseconds,
|
||||
formatTimer,
|
||||
remainingMilliseconds,
|
||||
timerPickerMilliseconds,
|
||||
timerPickerValue,
|
||||
} from './clock'
|
||||
describe('timestamp clocks', () => {
|
||||
it('derives elapsed and remaining time without an interval state', () => {
|
||||
expect(elapsedMilliseconds(500, 1000, 2500)).toBe(2000)
|
||||
expect(remainingMilliseconds(5000, 1000, 2500)).toBe(3500)
|
||||
expect(remainingMilliseconds(100, 1000, 2500)).toBe(0)
|
||||
})
|
||||
|
||||
it('formats and parses timer durations with hours, minutes, and seconds', () => {
|
||||
expect(formatTimer(3_661_000)).toBe('01:01:01')
|
||||
expect(timerPickerValue(3_661_000)).toBe('01:01:01')
|
||||
expect(timerPickerMilliseconds('01:01:01')).toBe(3_661_000)
|
||||
})
|
||||
})
|
||||
|
||||
@@ -27,7 +27,23 @@ export function formatStopwatch(milliseconds: number): string {
|
||||
|
||||
export function formatTimer(milliseconds: number): string {
|
||||
const totalSeconds = Math.ceil(milliseconds / 1000)
|
||||
const minutes = Math.floor(totalSeconds / 60)
|
||||
const hours = Math.floor(totalSeconds / 3600)
|
||||
const minutes = Math.floor((totalSeconds % 3600) / 60)
|
||||
const seconds = totalSeconds % 60
|
||||
return `${String(minutes).padStart(2, '0')}:${String(seconds).padStart(2, '0')}`
|
||||
return `${String(hours).padStart(2, '0')}:${String(minutes).padStart(2, '0')}:${String(seconds).padStart(2, '0')}`
|
||||
}
|
||||
|
||||
export function timerPickerValue(milliseconds: number): string {
|
||||
const totalSeconds = Math.floor(milliseconds / 1000)
|
||||
const hours = Math.floor(totalSeconds / 3600)
|
||||
const minutes = Math.floor((totalSeconds % 3600) / 60)
|
||||
const seconds = totalSeconds % 60
|
||||
return [hours, minutes, seconds]
|
||||
.map((value) => String(value).padStart(2, '0'))
|
||||
.join(':')
|
||||
}
|
||||
|
||||
export function timerPickerMilliseconds(value: string): number {
|
||||
const [hours = 0, minutes = 0, seconds = 0] = value.split(':').map(Number)
|
||||
return (hours * 3600 + minutes * 60 + seconds) * 1000
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user