Похоже, что большая часть вашего кода на самом деле не вызывается, похоже, только строки, которые влияют на вывод, таковы:
var now = new Date;
now.setHours(now.getHours() + 1);
var isPM = now.getHours() >= 12, isMidday = 12 == now.getHours(), result = document.querySelector("#result"),
time = [now.getHours() - (isPM && !isMidday ? 12 : 0), now.getMinutes() || "00"].join(":") + (isPM ? " pm" : "am");
result.innerHTML = time;
Наиболее релевантный кусок:
now.getMinutes() || "00"
Причина, по которой вы получаете незагруженную минуту в вашем примере, заключается в том, что вы обрабатываете только тогда, когда now.getMinutes () равен 0, пропуская регистр 1-9. Чтобы это исправить, вы можете просто сделать следующее:
(now.getMinutes() < 10) ? "0" + now.getMinutes() : "" + now.getMinutes()
Как уже упоминали другие, правильное форматирование дат и арифметика дат могут быть довольно хитрыми , особенно если вы работаете с такими вещами, как часовые пояса и разные локали. Использование такой библиотеки, как Moment.js , действительно хорошая идея.