2017-08-11 21 views
0

javascriptから時刻を2分遅らせて表示する機能があります。唯一の問題は、時刻が例えば午後2時である場合、機能は1:58 pmの代わりに2:0-2pmを表示することです。JavaScriptの時刻関数が正しく表示されない

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>

+0

'moment.js'を使用しないのはなぜ? – jdmdevdotnet

+1

いいえ、**あなたは 'eval'関数を必要としません。 – Dai

+0

あなたの 'i =" 0 "+ i'関数はあなたが思っていることをしません。 'i.toString()'を使います。また、 'innerHTML'の代わりに' textContent'を使います。 – Dai

答えて

1

問題は、数字だけでなく、時間を扱っていることを考慮せずに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>

1

私は時間の午後2時または任意の時点で「getMinutes()」関数は00を返しますので、それがあると思われる:ここでは

は、以下のコードであります分。したがって、2つを減算すると、58ではなく-2になります。

+0

問題を特定しましたが、修正がありますか? ;-) – RobG

関連する問題