2016-07-03 157 views
0

我正在爲一個已構建的定時器的暫停函數工作,並且我正在陷入一些困境。Javascript日期+毫秒

一旦定時器開始,我捕捉當前日期毫秒:

if(!begin){ 
    begin = Date.now(); 
} 

一旦用戶點擊暫停,它將再獲得以毫秒爲單位的當前日期。

// Pause the timer 
function pause(){ 
    console.log('Begin : ' + begin) //Begin : 1467580324524 
    console.log('End: ' + currentDate().getTime()) //End: 1467580329936 
    console.log('Difference: ' + parseInt(begin - currentDate().getTime())) //Difference: -5414 
    clearInterval(interval); 
} 

我現在有一個名爲difference變量,它包含的開始時間之間的毫秒數和停止時間。

當用戶點擊「恢復」時,我需要獲取當前日期並添加我們得到的毫秒差。然後應該使用新的時間點從當前停止的位置恢復計時器。

如何才能將毫秒添加到當前日期以獲得新的起點?

我想是這樣的,沒有運氣:

var mili = 4512; 
var newDate = new Date(mili*1000); 

更新:這裏是我的計時器代碼的鏈接,所以你可以看到我有工作。 https://jsfiddle.net/3dweffy8/3/

我通過清除間隔得到了暫停計時器,但我不知道如何繼續讓計時器恢復在這一點。

+0

這不是最好的算法,你爲什麼會消耗CPU,而用戶在暫停時,你可以增加從暫停的計時器? – ProllyGeek

+0

你可以提供,你期待在開始 - >暫停 - >恢復 - >暫停 - >恢復後的結果嗎?你是否期望轉換的時間是一個總數,或者你期望的是一個時間列表,每個時間都給出在第n個和第(n + 1)個第n個狀態之間轉換的時間。 – thst

+0

@thst - 我其實只是遇到了這個問題。開始>暫停>恢復工作正常,但當我暫停並再次恢復時,它會跳轉,就好像它從未停止計數。 – SBB

回答

1

獲取使用Date.now()當前時間戳,加毫秒的量,並從中作出新Date對象:

var newDate = new Date(Date.now() + mili) 
+1

爲什麼不簡單使用'Date.now()'?每次實例化一個實例(甚至2個實例)會更有效率。 – somethinghere

0

寫對象做簿記。

該對象將攜帶最後一次時間戳和測量結果,或者作爲總和或者作爲數組。

它暴露功能start(), stop(),pause(),resume()

in start():重置測量結果並獲取當前日期作爲referenceDate爲您的下一次測量。如果跟蹤器已在運行,則不執行任何操作。

stop():計算當前日期與referenceDate之間的差值。計數器不再有效。也許歸檔其餘的結果。

pause():計算當前日期與referenceDate之間的差值。如果要測量中斷,請將referenceDate設置爲當前日期。

resume():如果您測量中斷,計算當前日期和referenceDate之間的差異。 無論如何,請將referenceDate設置爲當前日期。

用法:

var tracker = new Tracker(); 

// start 
tracker.start(); 

// Pause the timer 
function pause(){ 
    tracker.pause(); 

    console.log('Begin : ' + tracker.startOfEvents); //Begin:1467580324524 
    console.log('End: ' + tracker.lastMeasurement); //End: 1467580329936 
    console.log('Difference: ' + tracker.difference) //Difference: -5414 

    // was this part of your measurement? 
    clearInterval(interval); 
} 

// later 
tracker.resume();