我正在使用简单的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 。不知道如何解决它。
答案 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
}