Skip to content

Countdown (useCountdown)

useCountdown is a Vue composable for countdown management, supporting precise wall-clock time calibration, millisecond-level precision, and custom formatting.

It helps you easily handle: verification code countdowns, event countdowns, payment time remaining, order timeout scenarios, and more.

Source code: GitHub

Usage

vue
<template>
  <text>{{ formatted }}</text>
  <button @tap="countdown.start()">Start</button>
  <button @tap="countdown.pause()">Pause</button>
  <button @tap="countdown.reset()">Reset</button>
</template>

<script setup>
import { computed } from 'vue'
import { useCountdown, formatCountdown } from 'see-u-ui'

const countdown = useCountdown({
  time: 60000,
  onChange: (timeData) => console.log('Changed:', timeData),
  onFinish: () => console.log('Countdown finished')
})

const formatted = computed(() => formatCountdown(countdown.current.value, 'mm:ss'))
</script>
vue
<script setup>
import { useCountdown } from 'see-u-ui'

// Use server timestamp for cross-client consistency
const countdown = useCountdown({
  serverTime: 1700000000000,
  endTime: 1700003600000,  // Ends in 1 hour
  onFinish: () => console.log('Event ended')
})
</script>
vue
<script setup>
import { useCountdown } from 'see-u-ui'

const countdown = useCountdown({
  time: 10000,
  millisecond: true,
  onChange: (timeData) => {
    console.log(`${timeData.seconds}.${timeData.milliseconds}`)
  }
})
</script>

Format Rules

formatCountdown supports the following placeholders:

PlaceholderDescriptionExample
DDDays (zero-padded)01
DDays1
HHHours (zero-padded)02
HHours2
mmMinutes (zero-padded)05
mMinutes5
ssSeconds (zero-padded)09
sSeconds9
SSSMilliseconds (zero-padded)012
SMilliseconds12

API

useCountdown(options)

Countdown management Hook

ParameterTypeDefaultDescription
options.timenumber0Countdown duration (ms)
options.intervalnumberautoCountdown interval (ms), 16ms for millisecond, 1000ms
options.millisecondbooleanfalseEnable millisecond precision
options.serverTimenumberundefinedServer current timestamp (ms)
options.endTimenumberundefinedEnd timestamp (ms), used with serverTime
options.onChange(timeData) => voidundefinedCountdown change callback
options.onFinish() => voidundefinedCountdown finish callback

Returns:

Property/MethodTypeDescription
currentRef<CountdownTimeData>Current countdown data
isRunningRef<boolean>Whether running
start() => voidStart countdown
pause() => voidPause countdown
reset(time?: number) => voidReset countdown, optionally with new duration
finish() => voidImmediately finish countdown
cleanup() => voidCleanup timer

parseCountdownTime(time)

Parse countdown data

ParameterTypeDescription
timenumberRemaining time (ms)

Returns: CountdownTimeData


formatCountdown(timeData, format?)

Format countdown display

ParameterTypeDefaultDescription
timeDataCountdownTimeDataCountdown data
formatstring'HH:mm:ss'Format template

Returns: string


CountdownTimeData

typescript
interface CountdownTimeData {
  days: number         // Days
  hours: number        // Hours
  minutes: number      // Minutes
  seconds: number      // Seconds
  milliseconds: number // Milliseconds
  total: number        // Total remaining milliseconds
}

Liao ICP No. 2025070134