mirror of
https://github.com/sky-systems/sky_phone.git
synced 2026-08-29 17:28:56 +00:00
58 lines
2.0 KiB
TypeScript
58 lines
2.0 KiB
TypeScript
export function elapsedMilliseconds(
|
|
accumulated: number,
|
|
startedAt: number | null,
|
|
now: number,
|
|
): number {
|
|
return Math.max(0, accumulated + (startedAt === null ? 0 : now - startedAt))
|
|
}
|
|
|
|
export function remainingMilliseconds(
|
|
remainingAtStart: number,
|
|
startedAt: number | null,
|
|
now: number,
|
|
): number {
|
|
return Math.max(
|
|
0,
|
|
remainingAtStart - (startedAt === null ? 0 : now - startedAt),
|
|
)
|
|
}
|
|
|
|
export function formatStopwatch(milliseconds: number): string {
|
|
const totalMilliseconds = Math.floor(milliseconds)
|
|
const minutes = Math.floor(totalMilliseconds / 60_000)
|
|
const seconds = Math.floor((totalMilliseconds % 60_000) / 1000)
|
|
const hundredths = Math.floor((totalMilliseconds % 1000) / 10)
|
|
return `${String(minutes).padStart(2, '0')}:${String(seconds).padStart(2, '0')}.${String(hundredths).padStart(2, '0')}`
|
|
}
|
|
|
|
export function formatTimer(milliseconds: number): string {
|
|
const totalSeconds = Math.ceil(milliseconds / 1000)
|
|
const hours = Math.floor(totalSeconds / 3600)
|
|
const minutes = Math.floor((totalSeconds % 3600) / 60)
|
|
const seconds = totalSeconds % 60
|
|
return `${String(hours).padStart(2, '0')}:${String(minutes).padStart(2, '0')}:${String(seconds).padStart(2, '0')}`
|
|
}
|
|
|
|
export function timerProgressRatio(
|
|
remainingMilliseconds: number,
|
|
durationMilliseconds: number,
|
|
): number {
|
|
if (durationMilliseconds <= 0) return 0
|
|
return Math.max(0, Math.min(1, remainingMilliseconds / durationMilliseconds))
|
|
}
|
|
|
|
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
|
|
}
|