-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.js
46 lines (39 loc) · 999 Bytes
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
import {
differenceInMilliseconds,
startOfSecond,
addSeconds,
getSeconds,
getMinutes,
getHours,
format
} from "date-fns";
import { useEffect, useState, useRef } from "react";
function msUntilNext() {
const start = startOfSecond;
const add = addSeconds;
const date = new Date();
return differenceInMilliseconds(add(start(date), 1), date);
}
function useCurrentTime() {
const [date, setDate] = useState(startOfSecond(new Date()));
const timer = useRef(0);
useEffect(() => {
function delayedTimeChange() {
timer.current = setTimeout(() => {
delayedTimeChange();
}, msUntilNext("second"));
setDate(new Date(startOfSecond(new Date())));
}
delayedTimeChange();
return () => clearTimeout(timer.current);
}, []);
return {
date,
hours: getHours(date),
minutes: getMinutes(date),
seconds: getSeconds(date),
time: format(date, "hh:mm aa"),
military: format(date, "H:mm")
};
}
export { useCurrentTime };