Посмотреть как написано у вас, откуда берется время - локальное время компьютера клиента? Или вы получаете время с сервера, и от него отсчитываете?
По setTimeout делается ЧТО? просто каждые 1000 мс время уменьшается на 1 сек, или каждые 1000 мс идет новый запрос к серверу, чтобы узнать свежее время?
Если просто уменьшается, то разница будет накапливаться, ибо javascript может работать с разной скоростью.
Правильно будет по setTimeout запрашивать новое время с сервера.
Можно по setTimeout уменьшать на 1, а каждую 5-ю секунду запрашивать с сервера точное время. Тогда все клиенты будут получать одинаковое время и каждые 5 секунд поправлять, если кто-то уходит вперед/запаздывает.