Я не получаю NaN:NaN:Nan AM
или что-то в этом роде, мне кажется, это просто работает.
Но в вашем коде есть некоторые недостатки. Во-первых, всегда объявляйте свои переменные локально, используя var
. Теперь вы молча перезаписываете d
, utc
и nd
в глобальном пространстве имен.
Во-вторых, это, скорее всего, не то, что вы хотите:
if (hours>12){
hours=hours-12
hours="0"+hours
}
Вы не хотите, чтобы 0
был добавлен до часа, если это между 22:00 и полночью. Кроме того, 0
не добавляется до 10 часов утра.
Возможно, вы хотите проверить это за пределами условие hours>12
:
if (hours<=9)
hours="0"+hours;
Кроме того, вы делаете
if (document.all)
document.all.clock.innerHTML=cdate
document.all
- очень старый, вам больше не нужно его использовать! Даже IE 6 понимает стандарт document.getElementById
.
setInterval("getthedate()",1000)
Всегда старайтесь использовать setInterval
и setTimeout
функцию вместо строки. Цитировать MDC :
Использование этого синтаксиса не рекомендуется по тем же причинам, что и использование eval ()
И, наконец, что не менее важно, используйте правильный отступ и ставьте точку с запятой после каждого утверждения; процитировать Дуглас Крокфорд :
JavaScript использует C-подобный синтаксис, который
требует использования точек с запятой
Разграничить заявления. JavaScript
попытки сделать точки с запятой необязательными
с механизмом вставки точек с запятой.
Это опасно.
Как и C, JavaScript имеет ++
и --
и (
операторов, которые могут быть
префиксы или суффиксы.
устранение неоднозначности сделано
точка с запятой.
В JavaScript перевод строки может быть
пробел или он может действовать как
точка с запятой. Это заменяет одну двусмысленность
с другим.
JSLint ожидает, что каждое утверждение будет
затем ;
, за исключением for
,
function
, if
, switch
, try
и
while
. JSLint не ожидает увидеть
ненужные точки с запятой или пустые
заявление.
Трудно следовать вашему коду так, как вы его написали; например, я поймал себя в ловушку, думая, что ваше состояние (hours>12)
было в пределах состояния AM / PM.