Hướng dẫn get number of days between two dates javascript - lấy số ngày giữa hai ngày javascript

Dưới đây là một triển khai nhanh chóng và bẩn thỉu của

var diff = Math.floor((Date.parse(str2) - Date.parse(str1)) / 86400000);
5, như một bằng chứng về khái niệm để giải quyết vấn đề như được trình bày trong câu hỏi. Nó phụ thuộc vào thực tế là bạn có thể nhận được các mili giây đã trôi qua giữa hai ngày bằng cách trừ chúng, điều này ép buộc họ vào giá trị số nguyên thủy của chúng (mili giây kể từ đầu năm 1970).quick and dirty implementation of
var diff = Math.floor((Date.parse(str2) - Date.parse(str1)) / 86400000);
5, as a proof of concept to solve the problem as presented in the question. It relies on the fact that you can get the elapsed milliseconds between two dates by subtracting them, which coerces them into their primitive number value (milliseconds since the start of 1970).

Show

/**
 * Take the difference between the dates and divide by milliseconds per day.
 * Round to nearest whole number to deal with DST.
 */
function datediff(first, second) {        
    return Math.round((second - first) / (1000 * 60 * 60 * 24));
}

/**
 * new Date("dateString") is browser-dependent and discouraged, so we'll write
 * a simple parse function for U.S. date format (which does no error checking)
 */
function parseDate(str) {
    var mdy = str.split('/');
    return new Date(mdy[2], mdy[0] - 1, mdy[1]);
}

alert(datediff(parseDate(first.value), parseDate(second.value)));

Bạn nên lưu ý rằng API ngày "bình thường" (không có "UTC" trong tên) hoạt động trong timezone cục bộ của trình duyệt của người dùng, vì vậy nói chung bạn có thể gặp sự cố nếu người dùng của bạn ở trong thời gian Mong đợi, và mã của bạn sẽ phải đối phó với việc chuyển thời gian tiết kiệm ánh sáng ban ngày. Bạn nên đọc kỹ tài liệu cho đối tượng ngày và các phương thức của nó, và cho bất cứ điều gì phức tạp hơn, hãy xem xét mạnh mẽ việc sử dụng thư viện cung cấp API an toàn và mạnh mẽ hơn để thao tác ngày.

  • Số và ngày - Hướng dẫn MDN JavaScript
  • var diff = Math.floor((Date.parse(str2) - Date.parse(str1)) / 86400000);
    
    6 - Tham khảo MDN JavaScript

Ngoài ra, với mục đích minh họa, đoạn trích sử dụng quyền truy cập được đặt tên trên đối tượng

var diff = Math.floor((Date.parse(str2) - Date.parse(str1)) / 86400000);
7 cho sự ngắn gọn, nhưng trong sản xuất, bạn nên sử dụng các API được tiêu chuẩn hóa như getEuityByid, hoặc nhiều khả năng là một số khung UI.

Hướng dẫn get number of days between two dates javascript - lấy số ngày giữa hai ngày javascript

Aljgom

6.8892 Huy hiệu vàng29 Huy hiệu bạc26 Huy hiệu đồng2 gold badges29 silver badges26 bronze badges

Đã trả lời ngày 12 tháng 2 năm 2009 lúc 20:43Feb 12, 2009 at 20:43

8

Theo văn bản này, chỉ có một trong những câu trả lời khác xử lý chính xác các chuyển đổi DST (thời gian tiết kiệm ánh sáng ban ngày). Dưới đây là kết quả trên một hệ thống ở California:

                                        1/1/2013- 3/10/2013- 11/3/2013-
User       Formula                      2/1/2013  3/11/2013  11/4/2013  Result
---------  ---------------------------  --------  ---------  ---------  ---------
Miles                   (d2 - d1) / N   31        0.9583333  1.0416666  Incorrect
some         Math.floor((d2 - d1) / N)  31        0          1          Incorrect
fuentesjr    Math.round((d2 - d1) / N)  31        1          1          Correct
toloco     Math.ceiling((d2 - d1) / N)  31        1          2          Incorrect

N = 86400000

Mặc dù

var diff = Math.floor((Date.parse(str2) - Date.parse(str1)) / 86400000);
8 trả về kết quả chính xác, tôi nghĩ rằng nó hơi cồng kềnh. Thay vào đó, bằng cách tính toán rõ ràng cho các thay đổi đối với bù UTC khi DST bắt đầu hoặc kết thúc, chúng ta có thể sử dụng số học chính xác:

function treatAsUTC(date) {
    var result = new Date(date);
    result.setMinutes(result.getMinutes() - result.getTimezoneOffset());
    return result;
}

function daysBetween(startDate, endDate) {
    var millisecondsPerDay = 24 * 60 * 60 * 1000;
    return (treatAsUTC(endDate) - treatAsUTC(startDate)) / millisecondsPerDay;
}

alert(daysBetween($('#first').val(), $('#second').val()));

Giải trình

Tính toán ngày JavaScript là khó khăn vì các đối tượng

var diff = Math.floor((Date.parse(str2) - Date.parse(str1)) / 86400000);
6 lưu trữ nhiều lần trong UTC, không phải giờ địa phương. Ví dụ: 3/10/2013 12: 00 & NBSP; AM Giờ chuẩn Thái Bình Dương (UTC-08: 00) được lưu trữ dưới dạng 3/10/2013 8: 00 & NBSP; AM UTC và 3/11/2013 12: 00 & NBSP; AM Pacific Giờ ban ngày (UTC-07: 00) được lưu trữ dưới dạng 3/11/2013 7: 00 & NBSP; AM UTC. Vào ngày này, nửa đêm đến nửa đêm giờ địa phương chỉ là 23 giờ ở UTC!

Mặc dù một ngày trong thời gian địa phương có thể có nhiều hơn 24 giờ, một ngày ở UTC luôn chính xác là 24 giờ.1 Phương pháp

function dateDiff( str1, str2 ) {
    var diff = Date.parse( str2 ) - Date.parse( str1 ); 
    return isNaN( diff ) ? NaN : {
        diff : diff,
        ms : Math.floor( diff            % 1000 ),
        s  : Math.floor( diff /     1000 %   60 ),
        m  : Math.floor( diff /    60000 %   60 ),
        h  : Math.floor( diff /  3600000 %   24 ),
        d  : Math.floor( diff / 86400000        )
    };
}
0 được hiển thị ở trên tận dụng thực tế này bằng cách gọi lần đầu tiên
function dateDiff( str1, str2 ) {
    var diff = Date.parse( str2 ) - Date.parse( str1 ); 
    return isNaN( diff ) ? NaN : {
        diff : diff,
        ms : Math.floor( diff            % 1000 ),
        s  : Math.floor( diff /     1000 %   60 ),
        m  : Math.floor( diff /    60000 %   60 ),
        h  : Math.floor( diff /  3600000 %   24 ),
        d  : Math.floor( diff / 86400000        )
    };
}
1 để điều chỉnh cả hai lần địa phương đến nửa đêm UTC, trước đó trừ và chia.

1. JavaScript bỏ qua những giây nhảy vọt.

Đã trả lời ngày 28 tháng 6 năm 2012 lúc 20:13Jun 28, 2012 at 20:13

Michael Liumichael LiuMichael Liu

49,8K13 Huy hiệu vàng114 Huy hiệu bạc145 Huy hiệu đồng13 gold badges114 silver badges145 bronze badges

3

Cách dễ nhất để có được sự khác biệt giữa hai ngày:

var diff = Math.floor((Date.parse(str2) - Date.parse(str1)) / 86400000);

Bạn nhận được những ngày khác biệt (hoặc NAN nếu một hoặc cả hai không thể được phân tích cú pháp). Ngày phân tích phân tích kết quả trong mili giây và để có được nó vào ngày bạn phải chia nó cho

function dateDiff( str1, str2 ) {
    var diff = Date.parse( str2 ) - Date.parse( str1 ); 
    return isNaN( diff ) ? NaN : {
        diff : diff,
        ms : Math.floor( diff            % 1000 ),
        s  : Math.floor( diff /     1000 %   60 ),
        m  : Math.floor( diff /    60000 %   60 ),
        h  : Math.floor( diff /  3600000 %   24 ),
        d  : Math.floor( diff / 86400000        )
    };
}
2

Nếu bạn muốn nó chia cho vài ngày, giờ, phút, giây và mili giây:

function dateDiff( str1, str2 ) {
    var diff = Date.parse( str2 ) - Date.parse( str1 ); 
    return isNaN( diff ) ? NaN : {
        diff : diff,
        ms : Math.floor( diff            % 1000 ),
        s  : Math.floor( diff /     1000 %   60 ),
        m  : Math.floor( diff /    60000 %   60 ),
        h  : Math.floor( diff /  3600000 %   24 ),
        d  : Math.floor( diff / 86400000        )
    };
}

Đây là phiên bản tái cấu trúc của tôi của phiên bản James:

function mydiff(date1,date2,interval) {
    var second=1000, minute=second*60, hour=minute*60, day=hour*24, week=day*7;
    date1 = new Date(date1);
    date2 = new Date(date2);
    var timediff = date2 - date1;
    if (isNaN(timediff)) return NaN;
    switch (interval) {
        case "years": return date2.getFullYear() - date1.getFullYear();
        case "months": return (
            ( date2.getFullYear() * 12 + date2.getMonth() )
            -
            ( date1.getFullYear() * 12 + date1.getMonth() )
        );
        case "weeks"  : return Math.floor(timediff / week);
        case "days"   : return Math.floor(timediff / day); 
        case "hours"  : return Math.floor(timediff / hour); 
        case "minutes": return Math.floor(timediff / minute);
        case "seconds": return Math.floor(timediff / second);
        default: return undefined;
    }
}

Hướng dẫn get number of days between two dates javascript - lấy số ngày giữa hai ngày javascript

Penny Liu

13.1k5 Huy hiệu vàng71 Huy hiệu bạc88 Huy hiệu đồng5 gold badges71 silver badges88 bronze badges

Đã trả lời ngày 13 tháng 2 năm 2009 lúc 1:50Feb 13, 2009 at 1:50

một chútsome

47.1K14 Huy hiệu vàng74 Huy hiệu bạc89 Huy hiệu đồng14 gold badges74 silver badges89 bronze badges

4

Tôi khuyên bạn nên sử dụng thư viện khoảnh khắc.js (http://momentjs.com/docs/#/displaying/difference/). Nó xử lý thời gian tiết kiệm ánh sáng ban ngày một cách chính xác và nói chung là tuyệt vời để làm việc.

Example:

var start = moment("2013-11-03");
var end = moment("2013-11-04");
end.diff(start, "days")
1

Đã trả lời ngày 21 tháng 8 năm 2013 lúc 16:17Aug 21, 2013 at 16:17

Stephenbezstephenbezstephenbez

5.5203 ​​Huy hiệu vàng25 Huy hiệu bạc31 Huy hiệu Đồng3 gold badges25 silver badges31 bronze badges

2

Các giải pháp sau đây sẽ giả sử các biến này có sẵn trong mã:

const startDate  = '2020-01-01';
const endDate    = '2020-03-15';

JS bản địa

Steps:

  1. Đặt ngày bắt đầu
  2. Đặt ngày kết thúc
  3. Tính toán sự khác biệt
  4. Chuyển đổi mili giây sang ngày
const diffInMs   = new Date(endDate) - new Date(startDate)
const diffInDays = diffInMs / (1000 * 60 * 60 * 24);

Comment:

Tôi biết đây không phải là một phần của câu hỏi của bạn mà nói chung, tôi không khuyên bạn nên thực hiện bất kỳ tính toán hoặc thao tác ngày nào trong Vanilla JavaScript và thay vào đó sử dụng thư viện như Date-Fns, Luxon hoặc Moment.js cho nó do nhiều trường hợp cạnh.

Câu trả lời JavaScript này tính toán các ngày là một số thập phân. Ngoài ra, nó có thể chạy vào các trường hợp cạnh khi làm việc với thời gian tiết kiệm ánh sáng ban ngày


Sử dụng một thư viện

- Ngày-fns


0

Tài liệu: https://date-fns.org/v2.16.1/docs/differenceindays

- Luxon


1

Tài liệu: https://moment.github.io/luxon/docs/class/src/datetime.js~datetime.html#instance-method-diff

- khoảnh khắc.js


2

Tài liệu: https://momentjs.com/docs/#/displaying/difference/


Ví dụ về Runkit

Aljgom

6.8892 Huy hiệu vàng29 Huy hiệu bạc26 Huy hiệu đồng2 gold badges29 silver badges26 bronze badges

Đã trả lời ngày 12 tháng 2 năm 2009 lúc 20:43Nov 8, 2017 at 13:34

Theo văn bản này, chỉ có một trong những câu trả lời khác xử lý chính xác các chuyển đổi DST (thời gian tiết kiệm ánh sáng ban ngày). Dưới đây là kết quả trên một hệ thống ở California:marcobiedermann

Mặc dù

var diff = Math.floor((Date.parse(str2) - Date.parse(str1)) / 86400000);
8 trả về kết quả chính xác, tôi nghĩ rằng nó hơi cồng kềnh. Thay vào đó, bằng cách tính toán rõ ràng cho các thay đổi đối với bù UTC khi DST bắt đầu hoặc kết thúc, chúng ta có thể sử dụng số học chính xác:3 gold badges22 silver badges33 bronze badges

6

Giải trình


3

Tính toán ngày JavaScript là khó khăn vì các đối tượng

var diff = Math.floor((Date.parse(str2) - Date.parse(str1)) / 86400000);
6 lưu trữ nhiều lần trong UTC, không phải giờ địa phương. Ví dụ: 3/10/2013 12: 00 & NBSP; AM Giờ chuẩn Thái Bình Dương (UTC-08: 00) được lưu trữ dưới dạng 3/10/2013 8: 00 & NBSP; AM UTC và 3/11/2013 12: 00 & NBSP; AM Pacific Giờ ban ngày (UTC-07: 00) được lưu trữ dưới dạng 3/11/2013 7: 00 & NBSP; AM UTC. Vào ngày này, nửa đêm đến nửa đêm giờ địa phương chỉ là 23 giờ ở UTC!Feb 12, 2009 at 20:45

Mặc dù một ngày trong thời gian địa phương có thể có nhiều hơn 24 giờ, một ngày ở UTC luôn chính xác là 24 giờ.1 Phương pháp

function dateDiff( str1, str2 ) {
    var diff = Date.parse( str2 ) - Date.parse( str1 ); 
    return isNaN( diff ) ? NaN : {
        diff : diff,
        ms : Math.floor( diff            % 1000 ),
        s  : Math.floor( diff /     1000 %   60 ),
        m  : Math.floor( diff /    60000 %   60 ),
        h  : Math.floor( diff /  3600000 %   24 ),
        d  : Math.floor( diff / 86400000        )
    };
}
0 được hiển thị ở trên tận dụng thực tế này bằng cách gọi lần đầu tiên
function dateDiff( str1, str2 ) {
    var diff = Date.parse( str2 ) - Date.parse( str1 ); 
    return isNaN( diff ) ? NaN : {
        diff : diff,
        ms : Math.floor( diff            % 1000 ),
        s  : Math.floor( diff /     1000 %   60 ),
        m  : Math.floor( diff /    60000 %   60 ),
        h  : Math.floor( diff /  3600000 %   24 ),
        d  : Math.floor( diff / 86400000        )
    };
}
1 để điều chỉnh cả hai lần địa phương đến nửa đêm UTC, trước đó trừ và chia.fuentesjr

1. JavaScript bỏ qua những giây nhảy vọt.27 gold badges76 silver badges80 bronze badges

1

Sử dụng khoảnh khắc.js


4

5

Ruslan López

4.3291 Huy hiệu vàng25 Huy hiệu bạc36 Huy hiệu đồng1 gold badge25 silver badges36 bronze badges

Đã trả lời ngày 30 tháng 4 năm 2015 lúc 20:03Apr 30, 2015 at 20:03

Michael Kmichael kMichael K

75410 Huy hiệu bạc13 Huy hiệu đồng10 silver badges13 bronze badges

1

Thử cái này


6

Đã trả lời ngày 29 tháng 4 năm 2021 lúc 2:54Apr 29, 2021 at 2:54

Hướng dẫn get number of days between two dates javascript - lấy số ngày giữa hai ngày javascript

borma425borma425borma425

3045 Huy hiệu bạc15 Huy hiệu Đồng5 silver badges15 bronze badges

Để tính toán ngày giữa 2 ngày đã cho, bạn có thể sử dụng mã sau. Tôi sử dụng ở đây là ngày 01 tháng 1 năm 2016 và ngày 31 tháng 12 năm 2016


7

8

MPLUNGJAN

161K27 Huy hiệu vàng168 Huy hiệu bạc226 Huy hiệu Đồng27 gold badges168 silver badges226 bronze badges

Đã trả lời ngày 11 tháng 1 năm 2016 lúc 5:07Jan 11, 2016 at 5:07

Hướng dẫn get number of days between two dates javascript - lấy số ngày giữa hai ngày javascript

Noona Marjanoona MarjaNooNa MarJa

5155 Huy hiệu bạc12 Huy hiệu Đồng5 silver badges12 bronze badges

Giá trị ngày trong JS là giá trị DateTime.

Vì vậy, tính toán trực tiếp không nhất quán:


9

Ví dụ: chúng ta cần chuyển đổi ngày thứ 2:

                                        1/1/2013- 3/10/2013- 11/3/2013-
User       Formula                      2/1/2013  3/11/2013  11/4/2013  Result
---------  ---------------------------  --------  ---------  ---------  ---------
Miles                   (d2 - d1) / N   31        0.9583333  1.0416666  Incorrect
some         Math.floor((d2 - d1) / N)  31        0          1          Incorrect
fuentesjr    Math.round((d2 - d1) / N)  31        1          1          Correct
toloco     Math.ceiling((d2 - d1) / N)  31        1          2          Incorrect

N = 86400000
0

Phương pháp có thể bị cắt cụt các nhà máy trong cả hai ngày:

                                        1/1/2013- 3/10/2013- 11/3/2013-
User       Formula                      2/1/2013  3/11/2013  11/4/2013  Result
---------  ---------------------------  --------  ---------  ---------  ---------
Miles                   (d2 - d1) / N   31        0.9583333  1.0416666  Incorrect
some         Math.floor((d2 - d1) / N)  31        0          1          Incorrect
fuentesjr    Math.round((d2 - d1) / N)  31        1          1          Correct
toloco     Math.ceiling((d2 - d1) / N)  31        1          2          Incorrect

N = 86400000
1

Ruslan López

4.3291 Huy hiệu vàng25 Huy hiệu bạc36 Huy hiệu đồng1 gold badge25 silver badges36 bronze badges

Đã trả lời ngày 30 tháng 4 năm 2015 lúc 20:03Nov 19, 2013 at 21:40

Michael Kmichael kNorris

75410 Huy hiệu bạc13 Huy hiệu đồng1 silver badge3 bronze badges

Thử cái này

                                        1/1/2013- 3/10/2013- 11/3/2013-
User       Formula                      2/1/2013  3/11/2013  11/4/2013  Result
---------  ---------------------------  --------  ---------  ---------  ---------
Miles                   (d2 - d1) / N   31        0.9583333  1.0416666  Incorrect
some         Math.floor((d2 - d1) / N)  31        0          1          Incorrect
fuentesjr    Math.round((d2 - d1) / N)  31        1          1          Correct
toloco     Math.ceiling((d2 - d1) / N)  31        1          2          Incorrect

N = 86400000
2

Đã trả lời ngày 29 tháng 4 năm 2021 lúc 2:54

3045 Huy hiệu bạc15 Huy hiệu ĐồngApr 30, 2015 at 7:58

Hướng dẫn get number of days between two dates javascript - lấy số ngày giữa hai ngày javascript

Để tính toán ngày giữa 2 ngày đã cho, bạn có thể sử dụng mã sau. Tôi sử dụng ở đây là ngày 01 tháng 1 năm 2016 và ngày 31 tháng 12 năm 2016Timo Kähkönen

MPLUNGJAN8 gold badges70 silver badges111 bronze badges

1

161K27 Huy hiệu vàng168 Huy hiệu bạc226 Huy hiệu Đồng

                                        1/1/2013- 3/10/2013- 11/3/2013-
User       Formula                      2/1/2013  3/11/2013  11/4/2013  Result
---------  ---------------------------  --------  ---------  ---------  ---------
Miles                   (d2 - d1) / N   31        0.9583333  1.0416666  Incorrect
some         Math.floor((d2 - d1) / N)  31        0          1          Incorrect
fuentesjr    Math.round((d2 - d1) / N)  31        1          1          Correct
toloco     Math.ceiling((d2 - d1) / N)  31        1          2          Incorrect

N = 86400000
3

MPLUNGJAN

161K27 Huy hiệu vàng168 Huy hiệu bạc226 Huy hiệu Đồng27 gold badges168 silver badges226 bronze badges

Đã trả lời ngày 11 tháng 1 năm 2016 lúc 5:07Jul 13, 2016 at 16:19

Noona Marjanoona Marjariv

5155 Huy hiệu bạc12 Huy hiệu Đồng1 silver badge1 bronze badge

1

Giá trị ngày trong JS là giá trị DateTime.

Vì vậy, tính toán trực tiếp không nhất quán:

                                        1/1/2013- 3/10/2013- 11/3/2013-
User       Formula                      2/1/2013  3/11/2013  11/4/2013  Result
---------  ---------------------------  --------  ---------  ---------  ---------
Miles                   (d2 - d1) / N   31        0.9583333  1.0416666  Incorrect
some         Math.floor((d2 - d1) / N)  31        0          1          Incorrect
fuentesjr    Math.round((d2 - d1) / N)  31        1          1          Correct
toloco     Math.ceiling((d2 - d1) / N)  31        1          2          Incorrect

N = 86400000
4

Ví dụ: chúng ta cần chuyển đổi ngày thứ 2:Mar 27, 2013 at 12:01

Phương pháp có thể bị cắt cụt các nhà máy trong cả hai ngày:guilin 桂林

Đã trả lời ngày 19 tháng 11 năm 2013 lúc 21:4028 gold badges92 silver badges145 bronze badges

Norrisnorris

                                        1/1/2013- 3/10/2013- 11/3/2013-
User       Formula                      2/1/2013  3/11/2013  11/4/2013  Result
---------  ---------------------------  --------  ---------  ---------  ---------
Miles                   (d2 - d1) / N   31        0.9583333  1.0416666  Incorrect
some         Math.floor((d2 - d1) / N)  31        0          1          Incorrect
fuentesjr    Math.round((d2 - d1) / N)  31        1          1          Correct
toloco     Math.ceiling((d2 - d1) / N)  31        1          2          Incorrect

N = 86400000
5

Huy hiệu Bạc 1111 Huy hiệu Đồng

Tốt hơn là loại bỏ DST, Math.ceil, Math.Floor, v.v. bằng cách sử dụng UTC Times:Apr 2, 2015 at 20:59

Ví dụ này cho sự khác biệt 109 ngày.

function dateDiff( str1, str2 ) {
    var diff = Date.parse( str2 ) - Date.parse( str1 ); 
    return isNaN( diff ) ? NaN : {
        diff : diff,
        ms : Math.floor( diff            % 1000 ),
        s  : Math.floor( diff /     1000 %   60 ),
        m  : Math.floor( diff /    60000 %   60 ),
        h  : Math.floor( diff /  3600000 %   24 ),
        d  : Math.floor( diff / 86400000        )
    };
}
3 là một ngày tính bằng mili giây.Popmatic

Đã trả lời ngày 30 tháng 4 năm 2015 lúc 7:581 silver badge6 bronze badges

1

                                        1/1/2013- 3/10/2013- 11/3/2013-
User       Formula                      2/1/2013  3/11/2013  11/4/2013  Result
---------  ---------------------------  --------  ---------  ---------  ---------
Miles                   (d2 - d1) / N   31        0.9583333  1.0416666  Incorrect
some         Math.floor((d2 - d1) / N)  31        0          1          Incorrect
fuentesjr    Math.round((d2 - d1) / N)  31        1          1          Correct
toloco     Math.ceiling((d2 - d1) / N)  31        1          2          Incorrect

N = 86400000
6

Timo Kähkönentimo Kähkönen

Huy hiệu vàng 11.6K8Nov 21, 2016 at 12:32

Hướng dẫn get number of days between two dates javascript - lấy số ngày giữa hai ngày javascript

1

Có thể tính toán sự khác biệt trong ngày đầy đủ giữa hai ngày nằm trên các TZ khác nhau bằng cách sử dụng công thức sau:ceil instead of floor, round will work but it isn't the right operation.

                                        1/1/2013- 3/10/2013- 11/3/2013-
User       Formula                      2/1/2013  3/11/2013  11/4/2013  Result
---------  ---------------------------  --------  ---------  ---------  ---------
Miles                   (d2 - d1) / N   31        0.9583333  1.0416666  Incorrect
some         Math.floor((d2 - d1) / N)  31        0          1          Incorrect
fuentesjr    Math.round((d2 - d1) / N)  31        1          1          Correct
toloco     Math.ceiling((d2 - d1) / N)  31        1          2          Incorrect

N = 86400000
7

Đã trả lời ngày 13 tháng 7 năm 2016 lúc 16:19Mar 15, 2012 at 14:21

Hướng dẫn get number of days between two dates javascript - lấy số ngày giữa hai ngày javascript

RivrivTolo Palmer

Huy hiệu bạc 10112 gold badges17 silver badges27 bronze badges

1

Tôi đã tìm thấy câu hỏi này khi tôi muốn thực hiện một số tính toán vào hai ngày, nhưng ngày có giá trị giờ và phút, tôi đã sửa đổi câu trả lời của @Michael-liu để phù hợp với yêu cầu của tôi và nó đã vượt qua bài kiểm tra của tôi.

                                        1/1/2013- 3/10/2013- 11/3/2013-
User       Formula                      2/1/2013  3/11/2013  11/4/2013  Result
---------  ---------------------------  --------  ---------  ---------  ---------
Miles                   (d2 - d1) / N   31        0.9583333  1.0416666  Incorrect
some         Math.floor((d2 - d1) / N)  31        0          1          Incorrect
fuentesjr    Math.round((d2 - d1) / N)  31        1          1          Correct
toloco     Math.ceiling((d2 - d1) / N)  31        1          2          Incorrect

N = 86400000
8

Ngày khác nhau function dateDiff( str1, str2 ) { var diff = Date.parse( str2 ) - Date.parse( str1 ); return isNaN( diff ) ? NaN : { diff : diff, ms : Math.floor( diff % 1000 ), s : Math.floor( diff / 1000 % 60 ), m : Math.floor( diff / 60000 % 60 ), h : Math.floor( diff / 3600000 % 24 ), d : Math.floor( diff / 86400000 ) }; } 4 và function dateDiff( str1, str2 ) { var diff = Date.parse( str2 ) - Date.parse( str1 ); return isNaN( diff ) ? NaN : { diff : diff, ms : Math.floor( diff % 1000 ), s : Math.floor( diff / 1000 % 60 ), m : Math.floor( diff / 60000 % 60 ), h : Math.floor( diff / 3600000 % 24 ), d : Math.floor( diff / 86400000 ) }; } 5 nên bằng 1. (2 giờ) ngày khác function dateDiff( str1, str2 ) { var diff = Date.parse( str2 ) - Date.parse( str1 ); return isNaN( diff ) ? NaN : { diff : diff, ms : Math.floor( diff % 1000 ), s : Math.floor( diff / 1000 % 60 ), m : Math.floor( diff / 60000 % 60 ), h : Math.floor( diff / 3600000 % 24 ), d : Math.floor( diff / 86400000 ) }; } 6 và function dateDiff( str1, str2 ) { var diff = Date.parse( str2 ) - Date.parse( str1 ); return isNaN( diff ) ? NaN : { diff : diff, ms : Math.floor( diff % 1000 ), s : Math.floor( diff / 1000 % 60 ), m : Math.floor( diff / 60000 % 60 ), h : Math.floor( diff / 3600000 % 24 ), d : Math.floor( diff / 86400000 ) }; } 7 nên bằng 1. (46 giờ)

                                        1/1/2013- 3/10/2013- 11/3/2013-
User       Formula                      2/1/2013  3/11/2013  11/4/2013  Result
---------  ---------------------------  --------  ---------  ---------  ---------
Miles                   (d2 - d1) / N   31        0.9583333  1.0416666  Incorrect
some         Math.floor((d2 - d1) / N)  31        0          1          Incorrect
fuentesjr    Math.round((d2 - d1) / N)  31        1          1          Correct
toloco     Math.ceiling((d2 - d1) / N)  31        1          2          Incorrect

N = 86400000
9

Đã trả lời ngày 27 tháng 3 năm 2013 lúc 12:01Dec 9, 2020 at 22:04

Hướng dẫn get number of days between two dates javascript - lấy số ngày giữa hai ngày javascript

guilin 桂林 guilin 桂林nkitku

16.8K28 Huy hiệu vàng92 Huy hiệu bạc145 Huy hiệu Đồng1 gold badge27 silver badges25 bronze badges

1

Đây có thể không phải là giải pháp thanh lịch nhất, nhưng dường như nó trả lời câu hỏi với một đoạn mã tương đối đơn giản, tôi nghĩ vậy. Bạn không thể sử dụng một cái gì đó như thế này:

Đây là giả sử bạn đang chuyển các đối tượng ngày làm tham số.Feb 12, 2009 at 20:16

Đã trả lời ngày 2 tháng 4 năm 2015 lúc 20:59kgiannakakis

Popmaticpopmatic27 gold badges159 silver badges193 bronze badges

0

function treatAsUTC(date) {
    var result = new Date(date);
    result.setMinutes(result.getMinutes() - result.getTimezoneOffset());
    return result;
}

function daysBetween(startDate, endDate) {
    var millisecondsPerDay = 24 * 60 * 60 * 1000;
    return (treatAsUTC(endDate) - treatAsUTC(startDate)) / millisecondsPerDay;
}

alert(daysBetween($('#first').val(), $('#second').val()));
0

MPLUNGJAN

161K27 Huy hiệu vàng168 Huy hiệu bạc226 Huy hiệu Đồng27 gold badges168 silver badges226 bronze badges

Đã trả lời ngày 11 tháng 1 năm 2016 lúc 5:07Jan 21, 2017 at 23:59

Hướng dẫn get number of days between two dates javascript - lấy số ngày giữa hai ngày javascript

3

function treatAsUTC(date) {
    var result = new Date(date);
    result.setMinutes(result.getMinutes() - result.getTimezoneOffset());
    return result;
}

function daysBetween(startDate, endDate) {
    var millisecondsPerDay = 24 * 60 * 60 * 1000;
    return (treatAsUTC(endDate) - treatAsUTC(startDate)) / millisecondsPerDay;
}

alert(daysBetween($('#first').val(), $('#second').val()));
1

Ruslan López

4.3291 Huy hiệu vàng25 Huy hiệu bạc36 Huy hiệu đồng1 gold badge25 silver badges36 bronze badges

Noona Marjanoona MarjaDec 2, 2014 at 2:49

Hướng dẫn get number of days between two dates javascript - lấy số ngày giữa hai ngày javascript

5155 Huy hiệu bạc12 Huy hiệu ĐồngAbdennour TOUMI

Giá trị ngày trong JS là giá trị DateTime.36 gold badges233 silver badges243 bronze badges

0

Vì vậy, tính toán trực tiếp không nhất quán:

function treatAsUTC(date) {
    var result = new Date(date);
    result.setMinutes(result.getMinutes() - result.getTimezoneOffset());
    return result;
}

function daysBetween(startDate, endDate) {
    var millisecondsPerDay = 24 * 60 * 60 * 1000;
    return (treatAsUTC(endDate) - treatAsUTC(startDate)) / millisecondsPerDay;
}

alert(daysBetween($('#first').val(), $('#second').val()));
2

Ví dụ: chúng ta cần chuyển đổi ngày thứ 2:Jan 25, 2019 at 19:52

Hướng dẫn get number of days between two dates javascript - lấy số ngày giữa hai ngày javascript

Phương pháp có thể bị cắt cụt các nhà máy trong cả hai ngày:OhhhThatVarun

Đã trả lời ngày 19 tháng 11 năm 2013 lúc 21:402 gold badges23 silver badges45 bronze badges

Norrisnorris

function treatAsUTC(date) {
    var result = new Date(date);
    result.setMinutes(result.getMinutes() - result.getTimezoneOffset());
    return result;
}

function daysBetween(startDate, endDate) {
    var millisecondsPerDay = 24 * 60 * 60 * 1000;
    return (treatAsUTC(endDate) - treatAsUTC(startDate)) / millisecondsPerDay;
}

alert(daysBetween($('#first').val(), $('#second').val()));
3

Huy hiệu Bạc 1111 Huy hiệu ĐồngJul 2, 2015 at 9:03

user3806549user3806549user3806549

Tốt hơn là loại bỏ DST, Math.ceil, Math.Floor, v.v. bằng cách sử dụng UTC Times:1 gold badge16 silver badges24 bronze badges

Ví dụ này cho sự khác biệt 109 ngày.

function dateDiff( str1, str2 ) {
    var diff = Date.parse( str2 ) - Date.parse( str1 ); 
    return isNaN( diff ) ? NaN : {
        diff : diff,
        ms : Math.floor( diff            % 1000 ),
        s  : Math.floor( diff /     1000 %   60 ),
        m  : Math.floor( diff /    60000 %   60 ),
        h  : Math.floor( diff /  3600000 %   24 ),
        d  : Math.floor( diff / 86400000        )
    };
}
3 là một ngày tính bằng mili giây.

function treatAsUTC(date) {
    var result = new Date(date);
    result.setMinutes(result.getMinutes() - result.getTimezoneOffset());
    return result;
}

function daysBetween(startDate, endDate) {
    var millisecondsPerDay = 24 * 60 * 60 * 1000;
    return (treatAsUTC(endDate) - treatAsUTC(startDate)) / millisecondsPerDay;
}

alert(daysBetween($('#first').val(), $('#second').val()));
4

Example:

function treatAsUTC(date) {
    var result = new Date(date);
    result.setMinutes(result.getMinutes() - result.getTimezoneOffset());
    return result;
}

function daysBetween(startDate, endDate) {
    var millisecondsPerDay = 24 * 60 * 60 * 1000;
    return (treatAsUTC(endDate) - treatAsUTC(startDate)) / millisecondsPerDay;
}

alert(daysBetween($('#first').val(), $('#second').val()));
5

Đã trả lời ngày 30 tháng 4 năm 2015 lúc 7:58Dec 16, 2015 at 16:56

Timo Kähkönentimo KähkönenWallace Sidhrée

Huy hiệu vàng 11.6K86 gold badges47 silver badges57 bronze badges

Có thể tính toán sự khác biệt trong ngày đầy đủ giữa hai ngày nằm trên các TZ khác nhau bằng cách sử dụng công thức sau:using milliseconds.

Đã trả lời ngày 13 tháng 7 năm 2016 lúc 16:19date.getTime() returns milliseconds and doing math operation with milliseconds requires to include

  • Rivriv
  • Huy hiệu bạc 1011
  • Tôi đã tìm thấy câu hỏi này khi tôi muốn thực hiện một số tính toán vào hai ngày, nhưng ngày có giá trị giờ và phút, tôi đã sửa đổi câu trả lời của @Michael-liu để phù hợp với yêu cầu của tôi và nó đã vượt qua bài kiểm tra của tôi.

Ngày khác nhau

function dateDiff( str1, str2 ) {
    var diff = Date.parse( str2 ) - Date.parse( str1 ); 
    return isNaN( diff ) ? NaN : {
        diff : diff,
        ms : Math.floor( diff            % 1000 ),
        s  : Math.floor( diff /     1000 %   60 ),
        m  : Math.floor( diff /    60000 %   60 ),
        h  : Math.floor( diff /  3600000 %   24 ),
        d  : Math.floor( diff / 86400000        )
    };
}
4 và
function dateDiff( str1, str2 ) {
    var diff = Date.parse( str2 ) - Date.parse( str1 ); 
    return isNaN( diff ) ? NaN : {
        diff : diff,
        ms : Math.floor( diff            % 1000 ),
        s  : Math.floor( diff /     1000 %   60 ),
        m  : Math.floor( diff /    60000 %   60 ),
        h  : Math.floor( diff /  3600000 %   24 ),
        d  : Math.floor( diff / 86400000        )
    };
}
5 nên bằng 1. (2 giờ) ngày khác
function dateDiff( str1, str2 ) {
    var diff = Date.parse( str2 ) - Date.parse( str1 ); 
    return isNaN( diff ) ? NaN : {
        diff : diff,
        ms : Math.floor( diff            % 1000 ),
        s  : Math.floor( diff /     1000 %   60 ),
        m  : Math.floor( diff /    60000 %   60 ),
        h  : Math.floor( diff /  3600000 %   24 ),
        d  : Math.floor( diff / 86400000        )
    };
}
6 và
function dateDiff( str1, str2 ) {
    var diff = Date.parse( str2 ) - Date.parse( str1 ); 
    return isNaN( diff ) ? NaN : {
        diff : diff,
        ms : Math.floor( diff            % 1000 ),
        s  : Math.floor( diff /     1000 %   60 ),
        m  : Math.floor( diff /    60000 %   60 ),
        h  : Math.floor( diff /  3600000 %   24 ),
        d  : Math.floor( diff / 86400000        )
    };
}
7 nên bằng 1. (46 giờ)+1 to its result if you want the to count all days involved.

function treatAsUTC(date) {
    var result = new Date(date);
    result.setMinutes(result.getMinutes() - result.getTimezoneOffset());
    return result;
}

function daysBetween(startDate, endDate) {
    var millisecondsPerDay = 24 * 60 * 60 * 1000;
    return (treatAsUTC(endDate) - treatAsUTC(startDate)) / millisecondsPerDay;
}

alert(daysBetween($('#first').val(), $('#second').val()));
6

Đã trả lời ngày 27 tháng 3 năm 2013 lúc 12:01Sep 20, 2016 at 1:48

0

guilin 桂林 guilin 桂林

function treatAsUTC(date) {
    var result = new Date(date);
    result.setMinutes(result.getMinutes() - result.getTimezoneOffset());
    return result;
}

function daysBetween(startDate, endDate) {
    var millisecondsPerDay = 24 * 60 * 60 * 1000;
    return (treatAsUTC(endDate) - treatAsUTC(startDate)) / millisecondsPerDay;
}

alert(daysBetween($('#first').val(), $('#second').val()));
7

Đã trả lời ngày 21 tháng 7 năm 2016 lúc 13:43Jul 21, 2016 at 13:43

3

Nếu bạn muốn có DateArray với ngày, hãy thử điều này:

function treatAsUTC(date) {
    var result = new Date(date);
    result.setMinutes(result.getMinutes() - result.getTimezoneOffset());
    return result;
}

function daysBetween(startDate, endDate) {
    var millisecondsPerDay = 24 * 60 * 60 * 1000;
    return (treatAsUTC(endDate) - treatAsUTC(startDate)) / millisecondsPerDay;
}

alert(daysBetween($('#first').val(), $('#second').val()));
8

Gỡ lỗi

Đã trả lời ngày 7 tháng 9 năm 2016 lúc 14:02Sep 7, 2016 at 14:02

Cách đơn giản để tính toán ngày giữa hai ngày là loại bỏ cả hai thành phần thời gian của họ, tức là cài đặt giờ, phút, giây và mili giây đến 0 và sau đó trừ thời gian của họ và lặn với nó với một phần nghìn giây.

function treatAsUTC(date) {
    var result = new Date(date);
    result.setMinutes(result.getMinutes() - result.getTimezoneOffset());
    return result;
}

function daysBetween(startDate, endDate) {
    var millisecondsPerDay = 24 * 60 * 60 * 1000;
    return (treatAsUTC(endDate) - treatAsUTC(startDate)) / millisecondsPerDay;
}

alert(daysBetween($('#first').val(), $('#second').val()));
9

Đã trả lời ngày 19 tháng 9 năm 2017 lúc 5:50Sep 19, 2017 at 5:50

Hướng dẫn get number of days between two dates javascript - lấy số ngày giữa hai ngày javascript

1

var diff = Math.floor((Date.parse(str2) - Date.parse(str1)) / 86400000);
0

Đã trả lời ngày 18 tháng 2 năm 2017 lúc 5:28Feb 18, 2017 at 5:28

Zloctbzloctbzloctb

9,9806 Huy hiệu vàng67 Huy hiệu bạc85 Huy hiệu Đồng6 gold badges67 silver badges85 bronze badges

Tôi đã lấy một số cảm hứng từ các câu trả lời khác và làm cho các đầu vào có vệ sinh tự động. Tôi hy vọng điều này hoạt động tốt như một cải tiến so với các câu trả lời khác.

var diff = Math.floor((Date.parse(str2) - Date.parse(str1)) / 86400000);
1
var diff = Math.floor((Date.parse(str2) - Date.parse(str1)) / 86400000);
2

Đã trả lời ngày 23 tháng 1 năm 2019 lúc 3:09Jan 23, 2019 at 3:09

Hướng dẫn get number of days between two dates javascript - lấy số ngày giữa hai ngày javascript

Lewdevlewdevlewdev

6.5712 Huy hiệu vàng28 Huy hiệu bạc21 Huy hiệu đồng2 gold badges28 silver badges21 bronze badges

1

Gần đây tôi có cùng một câu hỏi và đến từ một thế giới Java, tôi ngay lập tức bắt đầu tìm kiếm một triển khai JSR 310 cho JavaScript. JSR 310 là API ngày và giờ cho Java (được vận chuyển tiêu chuẩn là của Java 8). Tôi nghĩ rằng API được thiết kế rất tốt.

May mắn thay, có một cổng trực tiếp đến JavaScript, được gọi là JS-Joda.js-joda.

Đầu tiên, bao gồm JS-Joda trong

function dateDiff( str1, str2 ) {
    var diff = Date.parse( str2 ) - Date.parse( str1 ); 
    return isNaN( diff ) ? NaN : {
        diff : diff,
        ms : Math.floor( diff            % 1000 ),
        s  : Math.floor( diff /     1000 %   60 ),
        m  : Math.floor( diff /    60000 %   60 ),
        h  : Math.floor( diff /  3600000 %   24 ),
        d  : Math.floor( diff / 86400000        )
    };
}
8:

var diff = Math.floor((Date.parse(str2) - Date.parse(str1)) / 86400000);
3

Sau đó, chỉ cần làm điều này:

var diff = Math.floor((Date.parse(str2) - Date.parse(str1)) / 86400000);
4

Bây giờ

function dateDiff( str1, str2 ) {
    var diff = Date.parse( str2 ) - Date.parse( str1 ); 
    return isNaN( diff ) ? NaN : {
        diff : diff,
        ms : Math.floor( diff            % 1000 ),
        s  : Math.floor( diff /     1000 %   60 ),
        m  : Math.floor( diff /    60000 %   60 ),
        h  : Math.floor( diff /  3600000 %   24 ),
        d  : Math.floor( diff / 86400000        )
    };
}
0 chứa số ngày giữa. Lưu ý rằng ngày kết thúc là độc quyền.

Đã trả lời ngày 12 tháng 12 năm 2020 lúc 14:19Dec 12, 2020 at 14:19

Hướng dẫn get number of days between two dates javascript - lấy số ngày giữa hai ngày javascript

MC Emperormc Hoàng đếMC Emperor

21.4K14 Huy hiệu vàng76 Huy hiệu bạc122 Huy hiệu đồng14 gold badges76 silver badges122 bronze badges

Làm thế nào để bạn tìm thấy số ngày giữa hai ngày?

Để tính số ngày giữa hai ngày, bạn cần trừ ngày bắt đầu kể từ ngày kết thúc.Nếu điều này vượt qua vài năm, bạn nên tính toán số năm đầy đủ.Trong khoảng thời gian còn lại, làm việc ra số tháng.Trong thời gian còn lại, hãy tìm ra số ngày.subtract the start date from the end date. If this crosses several years, you should calculate the number of full years. For the period left over, work out the number of months. For the leftover period, work out the number of days.

Làm cách nào để đếm ngày giữa hai ngày trong jQuery?

dành thời gian();// Xác định số ngày giữa hai ngày.ngày var = millisbetween / (1000 * 3600 * 24);// Hiển thị số ngày cuối cùng giữa các ngày.var days = millisBetween / (1000 * 3600 * 24); // Show the final number of days between dates.

Làm thế nào để bạn tính toán số ngày giữa hai ngày trong TypeScript?

Hàm getdaydiff (startDate: ngày, cuối: ngày): số {const msinday = 24 * 60 * 60 * 1000;return math.Round (math.abs (số (enddate) - số (startDate)) / msinday);} // 👇 10 Bảng điều khiển.Nhật ký (getdaydiff (ngày mới ('2022-03-17'), ngày mới ('2022-03-27')));// 👇 30 Bảng điều khiển. round(Math. abs(Number(endDate) - Number(startDate)) / msInDay); } // 👇️ 10 console. log(getDayDiff(new Date('2022-03-17'), new Date('2022-03-27'))); // 👇️ 30 console.