import { useEffect, useState } from '@wordpress/element'; let serverOffsetMilliseconds = 0; export function syncClock( serverTime: string ): void { const serverTimestamp = Date.parse( serverTime ); if ( ! Number.isNaN( serverTimestamp ) ) { serverOffsetMilliseconds = serverTimestamp - Date.now(); } } function serverNow(): number { return Date.now() + serverOffsetMilliseconds; } export function useNow( refreshMilliseconds: number ): number { const [ now, setNow ] = useState( serverNow ); useEffect( () => { const timer = window.setInterval( () => { setNow( serverNow() ); }, refreshMilliseconds ); return () => { window.clearInterval( timer ); }; }, [ refreshMilliseconds ] ); return now; }