Javascript 时间函数无法正确显示

标签 javascript html date time

我有一个函数可以通过 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/

相关文章:

javascript - Jquery:动态附加到 context.childNodes[4] 不起作用

javascript - 如何解决 Require.js 中的循环依赖?

html - 到达边界时的 div 悬停问题

python - 使用 dateutil.parser.parse 抛出两位数年份日期的 ValueError

javascript - AngularJS:更改 $rootScope 变量不会更改 ng-model 中第一个选定的选项

javascript - 在 HTML 中创建压缩函数

javascript - 在由另一个 Ajax 单击事件添加的 div 上运行 Ajax 单击事件

javascript - 我的切换按钮有问题。每当我单击切换按钮时,该功能都没有响应并且不会更改为十字符号?

javascript - Vue.js 和 Moment.js 输出日期渲染对象而不是日期字符串

javascript - 如何在 javascript 中用力矩(moment.js)做一个大于或等于?