2010-12-14 47 views
8

Tôi đã xem: Get difference between 2 dates in javascript?chênh lệch ngày javascript

Và tôi vẫn không thể làm việc này.

var difference = data.List[0].EndDate - Math.round(new Date().getTime()/1000.0) * 1000; 
var daysRemaining = Math.floor(difference/1000/60/60/24); 
var hoursRemaining = Math.floor(difference/1000/60/60 - (24 * daysRemaining)); 
var minutesRemaining = Math.floor(difference/1000/60 - (24 * 60 * daysRemaining) - (60 * hoursRemaining)); 
var secondsRemaining = Math.floor(difference/1000 - (24 * 60 * 60 * daysRemaining) - (60 * 60 * hoursRemaining) - (60 * minutesRemaining)); 

data.List [0] .EndDate là một số tính theo giờ UTC (như: 1291427809310 (http://www.epochconverter.com/)) mà sẽ luôn luôn được muộn hơn ngày hiện tại.

+0

bạn mong đợi điều gì ở đầu ra? –

+0

để có giờ, phút và giây chính xác còn lại. – williamparry

+1

"Tôi không thể làm cho nó hoạt động" có nghĩa là chính xác? – epascarello

Trả lời

5

Bạn nói dấu thời gian UTC là "2004-09-16T23: 59: 58.75"?

Vì vậy, bạn về cơ bản làm

var x = "2004-09-16T23:59:58.75" - 123456 

Bây giờ bạn làm rõ rằng, so với ở trên không áp dụng. Bạn mới vấn đề là số mili giây là trong quá khứ vì vậy khi bạn làm việc tính toán sự khác biệt, bạn đang nhận được một số âm. Bạn có thể muốn trao đổi thứ tự xung quanh.

var difference = new Date().getTime()-data.List[0].EndDate; 
+0

xin lỗi cho tôi xấu, đó là một số như 1291427809310 – williamparry

+0

Đã thêm thông tin mới dựa trên những gì bạn đã nói trong nhận xét – epascarello

3

Nếu EndDate bằng mili giây và getTime() trả về mili giây, tại sao bạn chia cho 1000 giây để nhân với 1000 trong cùng một dòng? Và nếu bạn chỉ cần độ chính xác thứ hai cho tất cả các phần còn lại của mã, tại sao làm việc theo mili giây? Bắt đầu với một số giây để đơn giản hóa tất cả các tính toán của bạn:

var difference = Math.round((data.List[0].EndDate - new Date().getTime())/1000); 
11
function days_between(date1, date2) { 

    // The number of milliseconds in one day 
    var ONE_DAY = 1000 * 60 * 60 * 24 

    // Convert both dates to milliseconds 
    var date1_ms = date1.getTime() 
    var date2_ms = date2.getTime() 

    // Calculate the difference in milliseconds 
    var difference_ms = Math.abs(date1_ms - date2_ms) 

    // Convert back to days and return 
    return Math.round(difference_ms/ONE_DAY) 

} 

http://www.mcfedries.com/javascript/daysbetween.asp

+6

Thao tác này không quan tâm đến các trường hợp ngày 1 và ngày 2 vượt qua một sự kiện thay đổi tiết kiệm ánh sáng ban ngày. Xem http://stackoverflow.com/a/15289883/850996 –

+0

Tôi nên vượt qua định dạng nào? – nirav

0

tôi đã viết a component thực hiện chính xác điều này nếu bạn không muốn sử dụng toàn bộ librar y như moment.js. Nó cũng có thể tạo ra sự khác biệt trong bất kỳ đơn vị thời gian nào bạn cần (ngày, tuần, tháng, phút, giờ, v.v.).

Sau đây là cách nó sẽ làm việc:

var date1 = date.getTime(); 
var date2 = data.List[0].EndDate; 

var millisecondsRemaining = dateDiff(date1, date2, 'milliseconds'); 
var secondsRemaining = dateDiff(date1, date2, 'seconds'); 
var minutesRemaining = dateDiff(date1, date2, 'minutes'); 
var hoursRemaining = dateDiff(date1, date2, 'hours'); 
var daysRemaining = dateDiff(date1, date2, 'days'); 
var weeksRemaining = dateDiff(date1, date2, 'weeks'); 
var monthsRemaining = dateDiff(date1, date2, 'months'); 
var yearsRemaining = dateDiff(date1, date2, 'years'); 

Để sử dụng phương pháp DATEDIFF() bạn chỉ có thể nhập khẩu các thành phần.

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