2016-04-13 27 views
15

tôi nhận được kết quả không chính xác khi cố gắng tìm sự khác biệt số giữa hai thời điểm:js khoảnh khắc - hai thời điểm khác nhau về số ngày

var startDate = moment($('[name="date-start"]').val(), "DD.MM.YYYY"), // $('[name="date-start"]').val() === "13.04.2016" 
endDate  = moment($('[name="date-end"]' ).val(), "DD.MM.YYYY"); // $('[name="date-end"]').val() === "28.04.2016" 

var diff = startDate.diff(endDate); 

console.log(moment(diff).format('E')); 

giữa 13.04.201628.04.2016 tôi không nên có được sự khác biệt đó là hoặc ngày ...

tôi đã cố gắng để kết hợp nhiều:

  • swap startDate.diff(endDate) với endDate.diff(startDate)
  • format('E') với một cái gì đó tôi đã đi lên tìm kiếm kết quả SO

: tất cả các thời gian tôi nhận được sự khác biệt đó là 3 hoặc 2 ngày.

Tôi đang làm gì sai? Cảm ơn trước.

Trả lời

28

Từ moment.js docs: format('E') là viết tắt của ngày trong tuần. do đó diff của bạn đang được tính vào ngày nào trong tuần, trong đó có được từ 1 đến 7.

Từ moment.js tài liệu một lần nữa, đây là họ đề nghị những gì:

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

Đây là một JSFiddle đối với trường hợp cụ thể của bạn:

$('#test').click(function() { 
 
    var startDate = moment("13.04.2016", "DD.MM.YYYY"); 
 
    var endDate = moment("28.04.2016", "DD.MM.YYYY"); 
 

 
    var result = 'Diff: ' + endDate.diff(startDate, 'days'); 
 

 
    $('#result').html(result); 
 
});
#test { 
 
    width: 100px; 
 
    height: 100px; 
 
    background: #ffb; 
 
    padding: 10px; 
 
    border: 2px solid #999; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.12.0/moment.js"></script> 
 

 
<div id='test'>Click Me!!!</div> 
 
<div id='result'></div>

+0

ok, nhưng làm sao tôi có sự khác biệt giữa hai ngày này là 15 ngày? Cảm ơn bạn đã trả lời –

+0

Cập nhật câu trả lời của tôi ... hãy kiểm tra và cho tôi biết nếu nó vẫn không hoạt động – dubes

+0

Cảm ơn bạn đã giải pháp, nhưng bây giờ tôi sẽ phải thêm rất nhiều mã để nhận mảng đó từ những gì tôi nhận được từ '$ ('input [name = "date-start"]'). val() 'là' "13.04.2016" '. Có giải pháp nào có thể hoạt động với định dạng ngày hiện tại của tôi không? –

0

phương pháp diff trả về sự khác biệt trong mili giây. Việc lập tức moment(diff) không có ý nghĩa.

Bạn có thể định nghĩa một biến:

var dayInMilliseconds = 1000 * 60 * 60 * 24; 

và sau đó sử dụng nó như vậy:

diff/dayInMilliseconds // --> 15 

Sửa

thực sự, điều này được xây dựng vào phương pháp diff, dubes' câu trả lời là tốt hơn

+0

Điều này đã giúp ích rất nhiều, hãy để tôi xem nếu tôi đi theo cách này –

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