UTC 时间不是以 24 小时格式显示的,并且在上午 12 点之后不正确

UTC Time displayed not in 24 hour format and not correct after 12am

本文关键字:不正确 之后 时间 显示 格式 小时 UTC      更新时间:2023-09-26

我正在使用一个简单的javascript来显示我所在国家的当地时间,但它似乎不正确,并且没有以正确的顺序正确显示。午夜 12 点之后,时钟应该重置为 AM,但它一直显示下午的时间。

身体:

<body onload="updateClock(); setInterval('updateClock()', 1000 )">
//div tags, elements etc
</body>

.JS:

function updateClock (){
var currentTime =  new Date();
var currentHours = currentTime.getUTCHours() + 8; 
var currentMinutes = currentTime.getUTCMinutes();
var currentSeconds = currentTime.getUTCSeconds();
// var bucurestiOffset = 3*60000;
// var userOffset = currentTime.getTimezoneOffset()*60000;
currentMinutes = ( currentMinutes < 10 ? "0" : "" ) + currentMinutes;
currentSeconds = ( currentSeconds < 10 ? "0" : "" ) + currentSeconds;
var timeOfDay = ( currentHours < 12 ) ? "AM" : "PM";
currentHours = ( currentHours > 12 ) ? currentHours - 12 : currentHours;
currentHours = ( currentHours == 0 ) ? 12 : currentHours;
var currentTimeString = currentHours + ":" + currentMinutes + ":" + currentSeconds + " " + timeOfDay;
  document.getElementById("clock").firstChild.nodeValue = currentTimeString;
}

结果是这样的:下午 13:57,而应该是凌晨 1:57。不知道如何解决它。

currentTime.getUTCHours() + 8可以大于24,这会导致许多错误(例如小时不正确,但日,月或年不正确)。

您应该寻找像 moment.js 这样的库,以更好地处理时区和时间格式。

这将允许您使用当前+8时区的方法,但根据此函数准确计算它。

function calcTime(city, offset) {
    // create Date object for current location
    d = new Date();
    // convert to msec
    // add local time zone offset 
    // get UTC time in msec
    utc = d.getTime() + (d.getTimezoneOffset() * 60000);
    // create new Date object for different city
    // using supplied offset
    nd = new Date(utc + (3600000*offset));
    return nd
}

[来源]