我有一个函数可以通过 javascript 显示时间,延迟两分钟。唯一的问题是,例如,当时间为下午 2:00 时,该函数会显示 2:0-2pm,而不是 1:58pm。
下面是代码:
function startTime() {
var today = new Date();
var h = today.getHours();
var m = eval(today.getMinutes()-2); // needs eval function
var s = today.getSeconds();
m = checkTime(m);
s = checkTime(s);
var time = h>=12?" PM":" AM" // am or pm
h = h % 12;
h = h ? h : 12; // the hour '0' should be '12'
m = m < 10 ? ''+m : m;
document.getElementById('txt').innerHTML =
"Time: " + h + ":" + m + ":" + s + time;
var t = setTimeout(startTime, 500);
}
function checkTime(i) {
if (i < 10) {i = "0" + i}; // add zero in front of numbers < 10
return i;
}
<body onload="startTime()">
<div id="txt"></div>
最佳答案
你的问题是你减去了 2 分钟,却没有考虑到你处理的是时间,而不仅仅是数字。另外,你的函数可以更加简洁。
一个简单的解决方案是在格式化之前从日期中减去 2 分钟。这还将调整时间并允许在遵守夏令时的地方进行夏令时。如果转换时间为 02:00,进入夏令时,03:00 之前 2 分钟为 01:58。退出夏令时时也是如此。
考虑:
function get2MinsAgo() {
function z(n){return (n<10? '0' : '') + n}
var d = new Date();
d.setMinutes(d.getMinutes() - 2);
return (d.getHours() % 12 || 12) + ':' +
z(d.getMinutes()) + ':' +
z(d.getSeconds()) + ' ' +
(d.getHours() < 12? 'AM' : 'PM');
}
function showTime(){
// Run just after next full second
var lag = 1020 - new Date()%1000;
document.getElementById('timeText').textContent = get2MinsAgo();
setTimeout(showTime, lag);
}
showTime()
<div>Two minutes ago was <span id="timeText"></span></div>
关于Javascript 时间函数无法正确显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45640296/