Wie kann ich die Zeit zwischen 2 Daten im Typoskript berechnen?

138

Dies funktioniert in Javascript

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

Aber im Typoskript kann ich nicht zwei neue Daten ausruhen

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

Funktioniert nicht, da der Paremater nicht mit der Datumssignatur übereinstimmt

user2025288
quelle

Antworten:

152

Verwenden Sie die getTimeMethode , um die Zeit in Millisekunden seit dem 01.01.1970 zu ermitteln, und subtrahieren Sie diese:

var time = new Date().getTime() - new Date("2013-02-20T12:01:04.753Z").getTime();
Guffa
quelle
3
Ich denke, Sie verwechseln getTime () und valueOf (). GetTime () "Ruft den Zeitwert in Millisekunden ab." wohingegen es valueOf () ist, das "den gespeicherten Zeitwert in Millisekunden seit Mitternacht, dem 1. Januar 1970 UTC, zurückgibt."
Ken Lyon
Beide machen das Gleiche: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 Aus der MDN getTime-Dokumentation: Mit dieser Methode können Sie einem anderen Date-Objekt ein Datum und eine Uhrzeit zuweisen. Diese Methode entspricht funktional der Methode valueOf ().
PhoneixS
27
Ein Tipp, anstatt zu verwenden new Date().getTime(), Date.now()damit Sie nicht unnötig neue Objekte erstellen.
PhoneixS
1
@PhoneixS Interessant, dass sie gleichwertig sind. Danke für die Information! Dies ist auch ein guter Tipp, um das Erstellen neuer Objekte zu vermeiden.
Ken Lyon
110

So sollte es in Typoskript gemacht werden:

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

Bessere Lesbarkeit:

      var eventStartTime = new Date(event.startTime);
      var eventEndTime = new Date(event.endTime);
      var duration = eventEndTime.valueOf() - eventStartTime.valueOf();
Siddharth Singh
quelle
3
Dies ist der korrekteste Ansatz, da Javascript "valueOf" intern verwendet, wenn Arithmetik für Objekte ausgeführt wird. Typoskript sollte klug genug sein (leider noch nicht), um dies zu unterstützen, da es bereits weiß, dass die valueOf-Methode für ein Datum eine Zahl zurückgibt, wie in lib.d.ts
Bigjim
1
Interessanterweise ist das Typoskript jetzt so clever, dass selbst wenn Sie es nicht definieren eventStartTimeund eventEndTimediese Dauer als a eingegeben wird number(was bedeutet, wenn Sie die dritte Codezeile hier buchstäblich für sich nehmen, wird die Dauer eine Zahl sein)
Simon_Weaver
22

Es funktioniert nicht, weil es Date - Datesich genau auf die Art von Typenzwang stützt, die TypeScript verhindern soll.

Es gibt eine Problemumgehung mit dem +Präfix:

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

Oder wenn Sie es vorziehen, nicht zu verwenden Date.now():

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

Siehe Diskussion hier .

Oder siehe Siddharth Singhs Antwort unten für eine elegantere Lösung mit valueOf()

Jude Fisher
quelle
1
Genehmigen der Linkbearbeitung, da aufgrund des Schließens von CodePlex die ursprüngliche Diskussion unter dem vorhandenen Link nicht mehr verfügbar ist. Sofern es keine generellen Einwände gegen die Verwendung von web.archive.org gibt, wird der ursprüngliche Beitrag dadurch in keiner Weise beschädigt oder verunstaltet, sondern seine Bedeutung bewahrt.
Jude Fisher
11

Um die Differenz zu berechnen, müssen Sie den +Operator eingeben,

Auf diese Weise werden typescriptdie Daten in Zahlen umgewandelt.

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

Von dort aus können Sie eine Formel erstellen, um die Differenz in minutesoder umzuwandeln hours.

alexalejandroem
quelle
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) );
altergothen
quelle