Skip to content

Commit fbf3c27

Browse files
committed
add useTime to handle local time
1 parent 052ab1e commit fbf3c27

File tree

1 file changed

+63
-0
lines changed

1 file changed

+63
-0
lines changed

src/useTimer.js

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -238,3 +238,66 @@ export function useTimer(settings) {
238238

239239
return { seconds, minutes, hours, days, start, pause, resume };
240240
}
241+
242+
243+
/* ---------------------- useTime --------------------- */
244+
245+
export function useTime(settings) {
246+
const { format } = settings || {};
247+
const [seconds, setSeconds] = useState(0);
248+
const [minutes, setMinutes] = useState(0);
249+
const [hours, setHours] = useState(0);
250+
const [ampm, setAmPm] = useState('');
251+
252+
const intervalRef = useRef();
253+
function start() {
254+
if(!intervalRef.current) {
255+
setCurrentTime();
256+
intervalRef.current = setInterval(() => setCurrentTime(), 1000);
257+
}
258+
}
259+
260+
function reset() {
261+
if (intervalRef.current) {
262+
clearInterval(intervalRef.current);
263+
intervalRef.current = undefined;
264+
}
265+
setSeconds(0);
266+
setMinutes(0);
267+
setHours(0);
268+
setAmPm('');
269+
}
270+
271+
function formatHours(hours) {
272+
if (format === '12-hour') {
273+
const ampm = hours >= 12 ? 'pm' : 'am';
274+
var formattedHours = hours % 12;
275+
formattedHours = formattedHours || 12;
276+
return { hours: formattedHours, ampm };
277+
}
278+
return { hours, ampm: '' };
279+
}
280+
281+
282+
function setCurrentTime() {
283+
var now = new Date();
284+
const seconds = now.getSeconds();
285+
const minutes = now.getMinutes();
286+
const { hours, ampm } = formatHours(now.getHours());
287+
288+
289+
setSeconds(seconds);
290+
setMinutes(minutes);
291+
setHours(hours);
292+
setAmPm(ampm);
293+
}
294+
295+
// didMount effect
296+
useEffect(() => {
297+
start();
298+
return reset;
299+
},[]);
300+
301+
302+
return { seconds, minutes, hours, ampm };
303+
}

0 commit comments

Comments
 (0)