JavaScript试图为html制作时钟,无法分辨是什么坏事

问题描述 投票:0回答:2

此js时钟在Sharepoint站点上工作正常,但是我试图在本地文件上实现它,并且在某种程度上中断了它。我正在尝试使用getElementById查找跨度ID并将文本更改为当前时间。我不知道到底是什么坏了。感谢您的关注。 JSFiddle

function Time() {
  getElement("Zulu", worldClock(0, "NODST"));
  getElement("New York", worldClock(-5, "NAmerica"));
  setTimeout(time(), 1e3);
}

function getElement(n, t) {
  var i = document.getElementById(n);
  if (i)
    i.innerHTML = t;
  else {
    return
  }

}

function worldClock(n, t) {
  var c = 0,
    b = new Date(),
    k = b.getTimezoneOffset() * 6e4,
    a = new Date(k),
    s = a.getDate(),
    o = a.getMonth(),
    h = a.getYear(),
    d, v, p, w, l, e, y, u, i, f, r;
  return h < 1e3 && (h += 1900),
    d = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"],
    v = ["31", "28", "31", "30", "31", "30", "31", "31", "30", "31", "30", "31"],
    h % 4 == 0 && (v = ["31", "28", "31", "30", "31", "30", "31", "31", "30", "31", "30", "31"]),
    h % 100 == 0 && h % 400 != 0 && (v = ["31", "28", "31", "30", "31", "30", "31", "31", "30", "31", "30", "31"]),
    p = Math.floor(n),
    w = 0,
    n != 0 && n % 1 != 0 && (w = n % 1 * 60),
    l = a.getMinutes() + w,
    l > 59 ? (e = a.getHours() + p + 1,
    l -= 60) : e = a.getHours() + p,
    y = a.getSeconds(),
    e >= 24 && (e = e - 24,
    s -= -1),
    e < 0 && (e -= -24,
    s -= 1),
    e < 10 && (e = " " + e),
    l < 10 && (l = "0" + 1),
    y < 10 && (y = "0" + y),
    s <= 0 && (0 == 0 ? (o = 11,
    h -= 1) : o = o - 1,
    s = v[o]),
    s > v[o] && (s = 1,
    o == 11 ? (o = 0,
    h -= 1) : o -= -1),
    t == "NODST" && (c = 0),
    t == "NAmerica" && (u = new Date(),
      i = new Date(),
      u.setMonth(2),
      u.setHours(2),
      u.setDate(13),
      f = u.getDay(),
      f != 0 ? u.setDate(8 - f) : u.setDate(1),
      i.setMonth(9),
      i.setHours(1),
      i.setDate(31),
      f = i.getDay(),
      i.setDate(31 - f),
      r = new Date(),
      r.setMonth(o),
      r.setYear(h),
      r.setDate(s),
      r.setHours(e),
      r >= u && r < i && (c = 1))
}

javascript html getelementbyid clock
2个回答
1
投票

从设置超时开始,您将用作回调的小写“时间”,它不是函数,但是由于“()”而返回值

setTimeout(time(), 1e3);

如果我理解得很好,应该是:

 setTimeout(Time, 1e3);

也许仅仅使它无法运行,但肯定足以使它无法运行。


0
投票

您的代码完全不可读,您绝对应该重新考虑变量的命名和结构。从中略读两件事:

  • 您不是通过返回逗号分隔的表达式列表来返回列表。 comma operator仅返回列表中的最后一个值,因此worldClock将返回r >= u && r < i && (c = 1))
  • 您没有将对Time函数的引用传递给setTimeout,而是传递了函数调用的结果。您的意思是setTimeout(Time, 1e3)
  • 该函数称为Time,您正在尝试将setTimeouttime一起使用。 JS区分大小写,请将函数重命名为time

如果功能正常运行,我会感到惊讶,根据我的经验,不可读的代码就是不可靠的代码。但是尝试一下,告诉我是否可行!祝你好运!

© www.soinside.com 2019 - 2024. All rights reserved.