Вы не добьетесь такой точности.
+-1 ms...
Скрипт переключится на выполнения 1 раз в 1ms, когда разница между текущем временем и временем выполнения станет меньше стартового
interval.
Набросал на коленке ...и тут сильно есть куда оптимизировать))
function run(interval){
var timer = setInterval(function(){
var d = new Date(),
unixMidNight = Date.parse([d.getMonth()+1,d.getDate(),d.getFullYear()].join('/'));
var unix = unixMidNight + 14*60*60*1000; //14:00 текущего дня
var current = new Date().getTime();
if(interval != 1 && unix - current <= interval){
clearInterval(timer);
run(1);
}
if(unix <= current){
document.querySelector('button.button-submit').click();
clearInterval(timer);
}
}, interval);
}
run(5000);