2008-11-29 60 views
33

Tôi thực hiện một chức năng trong Javascript như DateDiff VisualBasic là gì.Cách tốt nhất để tính chênh lệch ngày tháng trong Javascript

Bạn cho hai ngày và khoảng thời gian quay trở lại (giây, phút, ngày, vv ...)

DateDiff(ByVal Interval As Microsoft.VisualBasic.DateInterval, _ 
    ByVal Date1 As Date, ByVal Date2 As Date) as Long 

Vì vậy, cách tốt nhất để tính toán sự khác biệt của Ngày Javascript là gì?

+1

Trùng lặp: http://stackoverflow.com/questions/41948/how-do-i-get-the-difference-between-two-dates-in-javascript –

Trả lời

49

Sử dụng Date object như vậy:

function DateDiff(var /*Date*/ date1, var /*Date*/ date2) { 
    return date1.getTime() - date2.getTime(); 
} 

này sẽ trả lại số mili giây chênh lệch giữa hai ngày. Chuyển đổi nó thành giây, phút, giờ vv không quá khó.

+29

Bạn không cần sử dụng 'getTime'. Nếu bạn chỉ làm 'return date1 - date2;', kết quả là như nhau. (Và đó không phải là một điều cụ thể cho việc triển khai thực hiện, nó nằm trong spec, mặc dù hơi gián tiếp). –

+3

Tôi khuyên bạn nên sử dụng 'return date2.getTime() - date1.getTime();' do đó thứ tự của các ngày như mong đợi (nếu không một số âm sẽ được trả về). – kingjeffrey

+1

Câu trả lời này được chấp nhận, nhưng thật sai, thật không may. Hãy thử mã 'new Date (new Date() - new Date());' –

4

Nếu bạn làm theo tutorial này, một cách là sử dụng:

Date.getTime() 

Bạn sẽ tìm thấy đầy đủ javascript function here, hoàn chỉnh với xác nhận ngày.

Điều đó đang được nói, như được nhận xét bởi Rafi B. 5 năm sau, "Get difference between 2 dates in javascript?" là chính xác hơn.

var _MS_PER_DAY = 1000 * 60 * 60 * 24; 

// a and b are javascript Date objects 
function dateDiffInDays(a, b) { 
    // Discard the time and time-zone information. 
    var utc1 = Date.UTC(a.getFullYear(), a.getMonth(), a.getDate()); 
    var utc2 = Date.UTC(b.getFullYear(), b.getMonth(), b.getDate()); 

    return Math.floor((utc2 - utc1)/_MS_PER_DAY); 
} 
+0

Đó là đưa ra giờ sai, Nếu bạn đặt 2PM thành 11.59PM cùng ngày. Thay vì cho 10 giờ, nó sẽ cho 10:59. Bạn có thể kiểm tra nó không? – jewelhuq

+0

@jewelhuq 8 năm sau, tôi sẽ cần thêm một chút chi tiết. Bạn có thể hỏi một câu hỏi riêng? – VonC

+0

var start = new Date ("2016-12-24 14:00"); var end = new Date ("2016-12-24 23:59"); var diffMs = (end.getTime() - start.getTime()); // mili giây giữa giờ và Giáng sinh var diffDays = Math.round (diffMs/86400000); // days var diffHrs = Math.round ((diffMs% 86400000)/3600000); // giờ ar diffMins = Math.round (((diffMs% 86400000)% 3600000)/60000); // minutes console.log (diffHrs); nó quay trở lại 10: 59 giờ, nó hoạt động tốt cho đến 23:00. vấn đề đang xảy ra. – jewelhuq

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