Làm cách nào để tính thời gian giữa 2 Ngày trong bản thảo


138

Điều này hoạt động trong Javascript

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

Nhưng trong bản thảo tôi không thể nghỉ hai Ngày mới

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

Đừng làm việc vì paremater không khớp chữ ký ngày

Câu trả lời:


152

Sử dụng getTimephương pháp để có được thời gian tính bằng mili giây kể từ 1970-01-01 và trừ đi:

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

3
Tôi nghĩ rằng bạn đang trộn lẫn getTime () và valueOf (). Theo các tài liệu, getTime () "Nhận giá trị thời gian tính bằng mili giây." trong khi đó là valueOf () "Trả về giá trị thời gian được lưu trữ tính bằng mili giây kể từ nửa đêm, ngày 1 tháng 1 năm 1970 UTC."
Ken Lyon

Cả hai đều làm như vậy: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 Từ tài liệu MDN getTime: Bạn có thể sử dụng phương pháp này để giúp gán ngày và giờ cho một đối tượng Ngày khác. Phương thức này có chức năng tương đương với phương thức valueOf ().
PhoneixS

29
Một mẹo, thay vì sử new Date().getTime()dụng Date.now()để bạn không tạo các đối tượng mới một cách không cần thiết.
PhoneixS

1
@PhoneixS Thú vị về chúng là tương đương. Cảm ơn vì đã cho tôi biết! Ngoài ra, đó là một mẹo hay về việc tránh tạo đối tượng mới.
Ken Lyon

110

Đây là cách nó nên được thực hiện trong bản thảo:

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

Dễ đọc hơn:

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

3
Đây là cách tiếp cận đúng nhất, vì javascript đang sử dụng "valueOf" trong nội bộ khi thực hiện số học trên các đối tượng. Bản đánh máy phải đủ thông minh (không may, chưa có) để hỗ trợ điều này vì nó đã biết rằng phương thức valueOf cho một ngày trả về một số như được định nghĩa trong lib.d.ts
Bigjim

1
Kiểu chữ thú vị bây giờ rất thông minh đến nỗi ngay cả khi bạn không xác định eventStartTimeeventEndTimethời lượng đó được nhập là number(nghĩa là nếu bạn thực sự lấy dòng mã thứ ba ở đây thì thời lượng sẽ là một con số)
Simon_Weaver

22

Nó không hoạt động vì Date - Datephụ thuộc chính xác vào loại cưỡng chế TypeScript được thiết kế để ngăn chặn.

Có một cách giải quyết này bằng cách sử dụng +tiền tố:

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

Hoặc, nếu bạn không thích sử dụng Date.now():

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

Xem thảo luận tại đây .

Hoặc xem câu trả lời của Siddharth Singh, bên dưới, để biết giải pháp thanh lịch hơn bằng cách sử dụng valueOf()


1
Phê duyệt chỉnh sửa liên kết vì, do CodePlex đóng, cuộc thảo luận ban đầu không còn khả dụng tại liên kết hiện có; trừ khi có một số phản đối về việc sử dụng web.archive.org, điều này không làm hỏng hoặc làm mất bài đăng gốc theo bất kỳ cách nào, mà chỉ giữ nguyên ý nghĩa của nó.
Jude Fisher

11

Để tính toán chênh lệch, bạn phải đặt +toán tử,

cách đó typescriptchuyển đổi ngày thành số.

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

Từ đó bạn có thể tạo một công thức để chuyển đổi sự khác biệt thành minuteshoặc 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) );
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.