UTC时间不是以24小时格式显示,而是在12点之后不正确

时间:2013-09-13 17:59:56

标签: javascript

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

体:

<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 AM 。不知道如何解决它。

2 个答案:

答案 0 :(得分:1)

currentTime.getUTCHours() + 8可能大于24,这会导致许多错误(例如小时不正确,但也不是正确的一天或一个月或一年)。

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

答案 1 :(得分:0)

这将允许您为时区提供+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
}

[source]