| 123456789101112131415161718192021222324252627282930313233 |
- export class CountdownTimer {
- private _timerID = -1;
- start(seconds: number, onUpdate: (left: number) => void, interval = 1) {
- this.stop();
- if (seconds <= 0) return;
- const end_ts = Date.now() + seconds * 1000;
- const update = () => {
- const left = Math.floor((end_ts - Date.now()) / 1000);
- onUpdate && onUpdate(left);
- }
- this._timerID = setInterval(update, interval * 1000);
- update();
- }
- stop() {
- if (this._timerID > -1) {
- clearInterval(this._timerID);
- }
- this._timerID = -1;
- }
- }
- export function formatTimes(seconds: number): string {
- const totalSeconds = Number.isFinite(seconds) ? Math.max(0, Math.floor(seconds)) : 0;
- const days = Math.floor(totalSeconds / 86_400);
- const hours = Math.floor((totalSeconds % 86_400) / 3_600);
- const minutes = Math.floor((totalSeconds % 3_600) / 60);
- const remainingSeconds = totalSeconds % 60;
- const pad = (value: number) => value.toString().padStart(2, '0');
- return `${days}D ${pad(hours)}:${pad(minutes)}:${pad(remainingSeconds)}`;
- }
|