Bagaimana saya bisa menghitung waktu antara 2 Tanggal di naskah ketikan

146

Ini berfungsi di Javascript

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

Tapi di naskah saya tidak bisa istirahat dua Tanggal baru

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

Tidak berfungsi karena paremater tidak cocok dengan tanda tangan tanggal

pengguna2025288
sumber

Jawaban:

162

Gunakan getTimemetode untuk mendapatkan waktu dalam milidetik total sejak 1970-01-01, dan kurangi itu:

var time = new Date().getTime() - new Date("2013-02-20T12:01:04.753Z").getTime();
Guffa
sumber
3
Saya pikir Anda mencampur getTime () dan valueOf (). Menurut dokumen, getTime () "Mendapat nilai waktu dalam milidetik." sedangkan valueOf () yang "Mengembalikan nilai waktu yang disimpan dalam milidetik sejak tengah malam, 1 Januari 1970 UTC."
Ken Lyon
Keduanya melakukan hal yang sama:new Date(1970, 1, 1, 0, 0, 0, 0).valueOf() // returns 2674800000 new Date(1970, 1, 1, 0, 0, 0, 0).getTime() // returns 2674800000
prespik
@KenLyon Dari dokumentasi getTime MDN: Anda dapat menggunakan metode ini untuk membantu menetapkan tanggal dan waktu ke objek Tanggal lainnya. Metode ini secara fungsional setara dengan metode valueOf ().
PhoneixS
33
Sebuah tip, alih-alih menggunakan new Date().getTime()use Date.now()agar Anda tidak membuat objek baru secara tidak perlu.
PhoneixS
1
@PhoneixS Menarik tentang mereka yang setara. Terima kasih telah memberi tahu saya! Juga, itu tip bagus tentang menghindari membuat objek baru.
Ken Lyon
119

Beginilah cara melakukannya dalam skrip ketikan:

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

Keterbacaan yang lebih baik:

      var eventStartTime = new Date(event.startTime);
      var eventEndTime = new Date(event.endTime);
      var duration = eventEndTime.valueOf() - eventStartTime.valueOf();
Siddharth Singh
sumber
4
Ini adalah pendekatan yang paling benar, karena javascript menggunakan "valueOf" secara internal saat melakukan aritmatika pada objek. Ketikan harus cukup pintar (sayangnya, belum) untuk mendukung ini karena sudah tahu bahwa metode valueOf untuk Tanggal mengembalikan angka seperti yang didefinisikan di lib.d.ts
Bigjim
1
Menariknya, skrip ketikan sangat pintar sekarang bahkan jika Anda tidak menentukan eventStartTimedan eventEndTimedurasi itu diketik sebagai number(artinya jika Anda benar-benar mengambil baris ketiga kode di sini dengan sendirinya di sini durasi akan menjadi angka)
Simon_Weaver
24

Ini tidak berfungsi karena Date - Datebergantung pada jenis pemaksaan tipe yang dirancang untuk dicegah oleh TypeScript.

Ada solusi untuk ini menggunakan +awalan:

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

Atau, jika Anda memilih untuk tidak menggunakan Date.now():

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

Lihat pembahasannya di sini .

Atau lihat jawaban Siddharth Singh, di bawah, untuk solusi yang lebih elegan menggunakan valueOf()

Jude Fisher
sumber
1
Menyetujui pengeditan tautan karena, karena penutupan CodePlex, diskusi asli tidak lagi tersedia di tautan yang ada; kecuali ada beberapa penolakan menyeluruh untuk menggunakan web.archive.org, ini tidak merusak atau merusak posting asli dengan cara apapun, melainkan mempertahankan maknanya.
Jude Fisher
13

Untuk menghitung selisih, Anda harus meletakkan + operator,

dengan cara itu typescriptmengubah tanggal menjadi angka.

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

Dari sana, Anda dapat membuat rumus untuk mengonversi selisih menjadi minutesatau hours.

alexalejandroem.dll
sumber
4
// 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
sumber