0

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

身体:

<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 PM,当它应该是1:57 AM 时。不知道如何解决。

4

2 回答 2

1

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

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

于 2013-09-13T18:05:55.937 回答
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
}

[资源]

于 2013-09-13T18:13:05.700 回答