2016-07-03 3 views
0

저는 빌드 한 타이머에 대한 일시 중지 기능을 수행 중이며 조금 갇혀 있습니다.자바 스크립트 날짜 + 밀리 초

는 즉시 타이머가 시작되면, 나는 밀리 초 단위로 현재 날짜를 캡처 : 사용자가 일시 중지를 클릭 한

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라는 변수가 있습니다.

사용자가 "Resume"을 클릭하면 현재 날짜를 가져 와서 우리가 얻은 밀리 초 차이를 추가해야합니다. 그런 다음 현재 시점에서 새 시점을 사용하여 타이머를 다시 시작해야합니다.

어떻게 새 시작 지점을 얻기 위해 현재 날짜에 밀리 초를 추가 할 수 있습니까?

나는 운없이 이런 식으로 뭔가를 시도 :

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

UPDATE : 당신은 내가 함께 일하고 무엇을 볼 수 있도록 여기 내 타이머 코드에 대한 링크입니다. 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().

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();