typescript에서 두 날짜 사이의 시간을 계산하는 방법


138

이것은 자바 스크립트에서 작동합니다

new Date()-new Date("2013-02-20T12:01:04.753Z")

그러나 typescript에서 나는 두 개의 새로운 날짜를 쉴 수 없다

Date("2013-02-20T12:01:04.753Z")

매개 변수가 날짜 서명과 일치하지 않아 작동하지 않습니다

답변:


152

getTime방법 을 사용하여 1970-01-01 이후 총 밀리 초 단위로 시간을 가져 와서 빼십시오.

var time = new Date().getTime() - new Date("2013-02-20T12:01:04.753Z").getTime();

3
getTime ()과 valueOf ()를 혼합한다고 생각합니다. 문서에 따르면 getTime () "시간 값을 밀리 초 단위로 가져옵니다." 반면에 1970 년 1 월 1 일 자정 이후 저장된 시간 값을 밀리 초 단위로 반환하는 valueOf ()입니다.
Ken Lyon

모두 동일 할 :new Date(1970, 1, 1, 0, 0, 0, 0).valueOf() // returns 2674800000 new Date(1970, 1, 1, 0, 0, 0, 0).getTime() // returns 2674800000
prespic

@KenLyon MDN getTime 설명서에서 : 이 방법을 사용하여 다른 Date 객체에 날짜와 시간을 지정할 수 있습니다. 이 메소드는 기능적으로 valueOf () 메소드와 동일합니다.
PhoneixS

29
팁은, 사용하는 대신 new Date().getTime()사용 Date.now()하면 불필요하게 새 개체를 만들어가 없습니다.
PhoneixS

1
@PhoneixS 그들과 동등한 것이 흥미 롭습니다. 알려 줘서 고마워! 또한 새로운 객체를 만드는 것을 피하는 좋은 팁입니다.
Ken Lyon

110

이것이 typescript에서 수행되는 방법입니다.

(new Date()).valueOf() - (new Date("2013-02-20T12:01:04.753Z")).valueOf()

가독성 향상 :

      var eventStartTime = new Date(event.startTime);
      var eventEndTime = new Date(event.endTime);
      var duration = eventEndTime.valueOf() - eventStartTime.valueOf();

3
자바 스크립트가 객체에 대해 산술을 수행 할 때 내부적으로 "valueOf"를 사용하기 때문에 이것이 가장 올바른 방법입니다. Typescript는 Date를위한 valueOf 메소드가 lib.d.ts에 정의 된 숫자를 반환한다는 것을 이미 알고 있기 때문에 이것을 지원할만큼 영리해야합니다 (불행히도 아직 그렇지는 않습니다)
Bigjim

1
흥미롭게도 타이프 라이터는 정의하지 않은 경우에도 이니까 너무 똑똑 eventStartTime하고 eventEndTime그 기간은로 입력됩니다 number(의미는 문자 그대로 그 자체로 여기에 코드의 세 번째 줄을 경우 여기를 지속 시간이 될 것입니다 수)
Simon_Weaver

22

Date - DateTypeScript가 예방하도록 설계된 유형의 강제 유형에 의존 하기 때문에 작동하지 않습니다 .

+접두사를 사용하여 해결 방법이 있습니다 .

var t = Date.now() - +(new Date("2013-02-20T12:01:04.753Z");

또는 사용하지 않으려는 경우 Date.now():

var t = +(new Date()) - +(new Date("2013-02-20T12:01:04.753Z"));

여기에서 토론을 참조하십시오 .

또는 아래의 Siddharth Singh의 답변을 참조하십시오. valueOf()


1
CodePlex가 폐쇄되어 기존 링크에서 원래 토론을 더 이상 사용할 수 없으므로 링크 편집을 승인합니다. web.archive.org를 사용하는 것에 반대하는 의견이 없다면, 원래의 게시물을 손상 시키거나 손상시키지 않고 그 의미를 보존합니다.
주드 피셔

11

+연산자 를 넣어야하는 차이를 계산하려면

그렇게 typescript하면 날짜가 숫자로 변환됩니다.

+new Date()- +new Date("2013-02-20T12:01:04.753Z")

거기에서 차이를 minutes또는 로 변환하는 수식을 만들 수 있습니다 hours.


3
// TypeScript

const today = new Date();
const firstDayOfYear = new Date(today.getFullYear(), 0, 1);

// Explicitly convert Date to Number
const pastDaysOfYear = ( Number(today) - Number(firstDayOfYear) );
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.