В одном из проектов делал такое. Метку времени храните в БД, чтобы на клиент её отдать. На клиенте получаете метку времени из БД с помощью сокетов/аякса и отрисовываете счётчик.
При обновлении страницы алгоритм тот же — дёрнуть базу, отрисовать счётчик с той же меткой.
Ещё нужно продумать логику отрисовки кнопки, потому что момент "прошло 24 часа" можно поймать при повторном открытии страницы — кнопка должна показаться сразу, её нужно отрендерить либо на сервере, либо логику описать на клиенте. И отдельно логику отрисовки кнопки, если этот момент наступил без перезагрузки страницы.
Ещё нужно контекст задачи покопать: вдруг что-то может произойти, из-за чего метка времени может поменяться с 24 часов на 32 часа, например. В данном случае клиент должен регулярно проверять метку времени, чтобы показывать актуальный счётчик. Например, если речь идёт о какой-то подписке и вы бонусом продлили подписку на 8 часов для пользователя.