为什么EST JavaScript日期将12:00:00AM设置为0:00:00 AM



我的JavaScript显示时间函数工作正常,但一旦它达到美国东部时间凌晨12:00:00,它就会变为凌晨0:00:00。本质上,我希望它在午夜钟声敲响时显示为凌晨12:00:00。我在下面包含了我的代码,所以有人可以帮忙吗?非常感谢。

let session = document.getElementById("session");
if (session) {
displayTime();
setInterval(displayTime, 1000);
clearInterval(displayTime);
}
function displayTime() {
let dateTime = new Date();
let hrs = dateTime.getHours();
let mins = dateTime.getMinutes();
let sec = dateTime.getSeconds();
if (hrs > 12) {
session.innerHTML = "xa0" + "PM";
} else {
session.innerHTML = "xa0" + "AM";
}
if (hrs > 12) {
hrs = hrs - 12;
} 

if (mins < 10) {
mins = "0" + mins;
}
if (sec < 10) {
sec = "0" + sec;
}
document.getElementById("hours").innerHTML = hrs;
document.getElementById("minutes").innerHTML = mins;
document.getElementById("seconds").innerHTML = sec;
}

有两件事需要改变。

  • 显示";PM";应该是>= 12而不是> 12

  • 24小时到12小时的映射不应使0保持原样。可以使用余数运算符。

以下是已更正的相关行:

if (hrs >= 12) {
session.innerHTML = "xa0" + "PM";
} else {
session.innerHTML = "xa0" + "AM";
}
hrs = (hrs + 11) % 12 + 1;

备选方案

要格式化时间,请查看toLocaleTimeString及其选项:

dateTime.toLocaleTimeString("en-US")

如果你真的需要在HTML文档上把日期部分分成不同的元素,那么:

function displayTime() {
let dateTime = new Date();
let [hrs, mins, sec, apm] = dateTime.toLocaleTimeString("en-US").split(/W/);
console.log(hrs, mins, sec, apm);
document.getElementById("hours").textContent = hrs;
document.getElementById("minutes").textContent = mins;
document.getElementById("seconds").textContent = sec;
document.getElementById("session").textContent = "xa0" + apm;
}

备注

不相关,但clearInterval在错误的时间调用,并且使用了错误的参数,幸运的是,这使它无效,或者您的计时器根本不会滴答作响。

clearInterval应该获取上一次对setInterval的调用返回的值作为参数。

在您的代码中,clearIntervalsetInterval之后立即执行,这没有什么意义。您应该在传递给setInterval的回调中有条件地调用它。也许过了一段时间。。。

最新更新