Вы используете setTimeout вместо setInterval. setTimeout будет ждать x количество времени перед выполнением, в то время как setInterval будет выполняться каждые x секунд.
Вы также записываете время один раз в dom. Я переместил его в setInterval, чтобы он обновил дом после получения нового времени.
var timeNode = document.getElementById("time");
function display_c(){
var refresh=1000; // Refresh rate in milli seconds
mytime=setInterval(function() {
timeNode.innerHTML = formatAMPM();
},refresh)
}
display_c();
function formatAMPM() {
var d = new Date(),
seconds = d.getSeconds().toString().length == 1 ? '0'+d.getSeconds() : d.getSeconds(),
minutes = d.getMinutes().toString().length == 1 ? '0'+d.getMinutes() : d.getMinutes(),
hours = d.getHours().toString().length == 1 ? '0'+d.getHours() : d.getHours(),
ampm = d.getHours() >= 12 ? 'pm' : 'am',
months = ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'],
days = ['Sun','Mon','Tue','Wed','Thu','Fri','Sat'];
return days[d.getDay()]+' '+months[d.getMonth()]+' '+d.getDate()+' '+d.getFullYear()+' '+hours+':'+minutes+':'+seconds;
}
<p id="time"></p>