ฉันจะคำนวณเวลาระหว่าง 2 วันใน typescript ได้อย่างไร


138

ใช้งานได้ใน Javascript

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

แต่ใน typescript ฉันไม่สามารถพักสองวันใหม่ได้

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 () ซึ่ง "คืนค่าเวลาที่เก็บไว้เป็นมิลลิวินาทีตั้งแต่เที่ยงคืนวันที่ 1 มกราคม 1970 UTC"
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 ควรฉลาดพอ (โชคไม่ดีที่มันยังไม่ได้) เพื่อรองรับสิ่งนี้เพราะมันรู้อยู่แล้วว่าวิธี valueOf สำหรับวันที่คืนค่าตัวเลขตามที่กำหนดใน lib.d.ts
Bigjim

1
ตัวพิมพ์ที่น่าสนใจนั้นฉลาดมากในขณะนี้แม้ว่าคุณจะไม่ได้กำหนดeventStartTimeและeventEndTimeช่วงเวลานั้นก็จะพิมพ์เป็นnumber(หมายถึงถ้าคุณใช้รหัสบรรทัดที่สามที่นี่ด้วยตัวเองที่นี่ระยะเวลาจะเป็นตัวเลข)
Simon_Weaver

22

มันไม่ทำงานเพราะDate - Dateอาศัยประเภทการข่มขู่ TypeScript ถูกออกแบบมาเพื่อป้องกัน

มีวิธีแก้ปัญหานี้โดยใช้+คำนำหน้า:

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")

จากนั้นคุณสามารถทำให้สูตรการแปลงความแตกต่างไปหรือminuteshours


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.