Daktiloda 2 Tarih arasındaki süreyi nasıl hesaplayabilirim


138

Bu Javascript ile çalışır

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

Ama daktiloda iki yeni tarihi dinleyemiyorum

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

Paremater tarih imzasıyla eşleşmediği için çalışma

Yanıtlar:


152

1970-01-01'den bu yana toplam milisaniye cinsinden zamanı almak için getTimeyöntemi kullanın ve bunları çıkarın:

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

3
Ben getTime () ve valueOf () karıştırıyoruz düşünüyorum. Dokümanlara göre getTime () "Zaman değerini milisaniye cinsinden alır." oysa "1 Ocak 1970 UTC gece yarısından bu yana milisaniye olarak depolanan zaman değerini döndürür."
Ken Lyon

Her ikisi de aynı şeyi yapar: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 belgelerinden: Başka bir Date nesnesine tarih ve saat atamasına yardımcı olması için bu yöntemi kullanabilirsiniz. Bu yöntem işlevsel olarak valueOf () yöntemine eşdeğerdir.
PhoneixS

29
Gereksiz yere yeni nesneler yapmak için new Date().getTime()kullanım yerine bir ipucu Date.now().
PhoneixS

1
@PhoneixS Eşdeğer olmaları ilginç. Bilmeme izin verdiğin için teşekkürler! Ayrıca, bu yeni nesneler oluşturmaktan kaçınmak için iyi bir ipucu.
Ken Lyon

110

Daktiloda şöyle yapılması gerekir:

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

Daha iyi okunabilirlik:

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

4
Javascript nesneler üzerinde aritmetik yaparken dahili olarak "valueOf" kullandığından bu en doğru yaklaşımdır. Daktilo metni, bunu desteklemek için yeterince akıllı olmalıdır (talihsiz bir şekilde, henüz değil), çünkü bir Date için valueOf yönteminin lib.d.ts
Bigjim

1
İlginç bir şekilde daktilo yazısı o kadar zekidir ki, tanımlamasanız eventStartTimeve eventEndTimebu süre bir olarak numberyazılsa bile (kelimenin tam anlamıyla üçüncü kod satırını burada kendiniz alırsanız, süre bir sayı olacaktır)
Simon_Weaver

22

Bu çalışmaz çünkü Date - DateTypeScript tam olarak önlemek için tasarlanan tipte baskıya dayanır.

Bu +öneki kullanan bir geçici çözüm vardır :

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

Veya, kullanmamayı tercih ediyorsanız Date.now():

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

Buradaki tartışmaya bakın .

Veya daha şık bir çözüm için aşağıdaki Siddharth Singh'in cevabına bakın. valueOf()


1
CodePlex'in kapatılması nedeniyle orijinal tartışma artık mevcut bağlantıda bulunmadığından bağlantı düzenlemesini onaylama; web.archive.org'u kullanmanın bazı itirazları yoksa, bu orijinal gönderiye hiçbir şekilde zarar vermez veya tahrif etmez, bunun yerine anlamını korur.
Jude Fisher

11

Farkı hesaplamak için +operatörü koymak zorundasınız ,

bu şekilde typescripttarihleri ​​sayılara dönüştürür.

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

Oradan farkı minutesveya dönüştürmek için bir formül yapabilirsiniz 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) );
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.