typescriptで2つの日付間の時間を計算するにはどうすればよいですか


138

これはJavaScriptで動作します

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

しかしtypescriptでは2つの新しい日付を休めることはできません

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

parematerが日付の署名と一致しないため機能しません

回答:


152

getTimeメソッドを使用して、1970-01-01からの合計ミリ秒単位の時間を取得し、それらを差し引きます。

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

3
getTime()とvalueOf()を混同していると思います。ドキュメントによると、getTime()は「ミリ秒単位で時間値を取得します。」一方、valueOf()は、「1970年1月1日午前0時(UTC)からの保存された時間値をミリ秒単位で返します。」
ケン・リヨン

どちらも同じことを行いますnew Date(1970, 1, 1, 0, 0, 0, 0).valueOf() // returns 2674800000 new Date(1970, 1, 1, 0, 0, 0, 0).getTime() // returns 2674800000
。–好評を博す

@KenLyon MDN getTimeドキュメントから:このメソッドを使用して、日付と時刻を別のDateオブジェクトに割り当てることができます。このメソッドは、機能的にはvalueOf()メソッドと同等です。
PhoneixS 2018年

29
ヒントを使用new Date().getTime()する代わりに、Date.now()不必要に新しいオブジェクトを作成しないようにします。
PhoneixS 2018年

1
@PhoneixSそれらが同等であることについて興味深い。知らせてくれてありがとうございます!また、それは新しいオブジェクトの作成を回避するための良いヒントです。
ケン・リヨン

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
オブジェクトで算術を行う場合、JavaScriptは内部で「valueOf」を使用しているため、これが最も正しいアプローチです。Typescriptは、DateのvalueOfメソッドがlib.d.tsで定義されている数値を返すことをすでに知っているため、これをサポートするのに十分な(残念ながら、まだサポートされていません)
Bigjim

1
興味深いことに、typescriptはとても賢いので、定義しなくてもeventStartTimeeventEndTimeその期間がaとして入力されますnumber(つまり、ここで文字列の3行目のコードをそのまま使用すると、期間は数値になります)
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.