2012-02-03 69 views
106

Tôi có hai ngày nhập liệu lấy từ điều khiển Bộ chọn ngày. Tôi đã chọn ngày bắt đầu 2/2/2012 và ngày kết thúc 2/7/2012. Tôi đã viết mã sau cho điều đó.JavaScript: Cách tính số ngày giữa hai ngày bằng cách sử dụng javascript

tôi nên kết quả là 6 nhưng tôi nhận được 5.

function SetDays(invoker) { 
    var start = $find('<%=StartWebDatePicker.ClientID%>').get_value(); 
    var end = $find('<%=EndWebDatePicker.ClientID%>').get_value(); 

    var oneDay=1000 * 60 * 60 * 24; 
    var difference_ms = Math.abs(end.getTime() - start.getTime()) 
    var diffValue = Math.round(difference_ms/oneDay); 
} 

bất cứ ai có thể cho tôi biết làm thế nào tôi có thể nhận được sự khác biệt chính xác?

+1

nhưng ... 7 trừ 2 là 5 ... – Pointy

+0

tại sao bạn nên nhận kết quả = 6 ??? 07 - 02 = 05 ngày .... –

+0

Nhưng phạm vi ngày từ 2 đến 7 là 2,3,4,5,6,7 = 6 ngày. – Supr

Trả lời

296

http://momentjs.com/ hoặc https://date-fns.org/

Từ docs Moment:

var a = moment([2007, 0, 29]); 
var b = moment([2007, 0, 28]); 
a.diff(b, 'days') // =1 

hoặc để bao gồm đầu:

a.diff(b, 'days')+1 // =2 

Beats messi ng với dấu thời gian và múi giờ theo cách thủ công.

Tùy thuộc vào trường hợp sử dụng cụ thể của bạn, bạn có thể

  1. Sử dụng a/b.startOf('day') và/hoặc a/b.endOf('day') để buộc các diff được bao gồm hoặc độc quyền tại "tận cùng" (theo đề nghị của @kotpal trong các ý kiến) .
  2. Đặt đối số thứ ba true để nhận chênh lệch dấu phẩy động mà sau đó bạn có thể Math.floor, Math.ceil hoặc Math.round khi cần.
  3. Tùy chọn 2 cũng có thể được thực hiện bằng cách nhận 'seconds' thay vì 'days' và sau đó chia cho 24*60*60.
+0

Cảm ơn nó đã làm việc cho tôi. –

+12

moment.js sẽ cho giá trị âm nếu

+4

Hãy nhớ bỏ qua phần thời gian - nếu không bạn sẽ nhận được kết quả khác cho cùng ngày nhưng với thời gian khác nhau (như từ điều khiển bộ chọn ngày). thời gian sử dụng (someDate) .startOf ('ngày') để đặt rõ ràng phần thời gian thành 00:00:00 trước khi thực hiện một khác biệt (hoặc bất kỳ hoạt động nào khác nhạy cảm với phần thời gian của đối tượng Ngày/phút) – kotpal

8

Hãy thử:

//Difference in days 

var diff = Math.floor((start - end)/86400000); 
alert(diff); 
+0

Tôi nghĩ rằng đó là cơ bản đúng nhưng không phải là nó cơ bản giống như những gì trong OP? – Pointy

+0

Vì cách anh ấy viết nó, tôi không để ý, nhưng vâng, khá nhiều! : P – Richard

+0

Điều này rõ ràng và dễ đọc hơn. –

Các vấn đề liên quan