Cách tính số ngày giữa hai ngày trong JavaScript

Tôi thường phải lấy số ngày giữa 2 ngày trong các ứng dụng JavaScript của mình. Trong bài viết này, cùng mình xem cách tính số ngày giữa 2 ngày với JavaScript này nhé.

Tính số ngày trong tháng JavaScript

Trong javascript không tồn tại phương thức nào trực tiếp giúp chúng ta tính số ngày trong tháng javascript. Tuy nhiên bằng cách ứng dụng các phương thức có sẵn thì chúng ta hoàn toàn có thể tự tạo ra hàm tính số ngày trong tháng javascript.

Ý tưởng ở đây đó là, số ngày trong một tháng chính là ngày cuối cùng của tháng đó. Bằng cách lấy ngày cuối cùng của tháng, chúng ta có thể đơn giản tính ra số ngày trong tháng chỉ định.

Thế nên, chúng ta cần 2 xử lý, một là tạo date instance chứa thông tin ngày cuối cùng trong tháng, và 2 là dùng hàm getDate() trong đối tượng Date để lấy số ngày từ date instance đó.

Và chúng ta viết hàm tính số ngày trong tháng javascript như sau:

/*Hàm tính số ngày trong tháng javascript*/
const get_day_of_month = (year, month) => {
    return new Date(year, month, 0).getDate();
};
Code language: JavaScript (javascript)
  • Ở trên chúng ta dùng hàm new Date với cách viết new Date(year, month, 0) để khai báo ngày cuối cùng trong tháng. Bạn có thể tham khảo thêm về hàm này tại bài Khai báo date trong JavaScript

Ví dụ cụ thể, chúng ta tính số ngày trong tháng 2 và tháng 3 bằng JavaScript như sau:

const get_day_of_month = (year, month) => {
    return new Date(year, month, 0).getDate();
};

let thang2 = get_day_of_month(2021, 2); //28
let thang3 = get_day_of_month(2021, 3); //31
Code language: JavaScript (javascript)

Sử dụng phương pháp chuỗi và ngày tháng

Bạn có thể tính số ngày giữa 2 ngày với JavaScript bằng cách sử dụng các phương thức chuỗi gốc và ngày tháng.

Ví dụ, bạn có thể viết:

const parseDate = (str) => {
  const [month, day, year] = str.split('/');
  return new Date(year, month - 1, day);
}

const datediff = (first, second) => {
  return Math.round((second - first) / (1000 * 60 * 60 * 24));
}

const diff = datediff(parseDate("1/1/2000"), parseDate("1/1/2001"))
console.log(diff)Code language: JavaScript (javascript)

Bạn có hàm parseDate lấy chuỗi ngày str ở định dạng MM / DD / YYYY.

Tôi phân tích cú pháp nó bằng cách tách chuỗi ngày với ‘/’ làm dấu phân cách.

Sau đó, tôi nhận được year, monthday bằng cách khử cấu trúc.

Và sau đó bạn truyền tất cả những điều đó vào hàm Date, xây dựng để trả về một đối tượng ngày tháng.

Bạn phải trừ month đi 1 để có được tháng JavaScript chính xác.

Sau đó, tôi tính toán chênh lệch ngày với phương pháp dateDiff bằng cách trừ đi second theo first.

Khi tôi trừ đi 2 ngày, cả hai ngày sẽ tự động được chuyển đổi thành dấu thời gian trước khi trừ.

Vì vậy, bạn có thể trừ chúng trực tiếp.

Và sau đó tôi chia điều này cho 1 ngày tính bằng mili giây.

Cuối cùng, tôi làm tròn kết quả phân chia với Math.round.

Bây giờ bạn có thể gọi tất cả các hàm mà mình đã tạo để phân tích cú pháp và nhận được sự khác biệt về ngày so với các ngày được phân tích cú pháp.

Và vì vậy chúng tôi nhận được diff là 366.

moment.js để tính số ngày giữa hai ngày trong JavaScript

Chúng ta có thể sử dụng moment.js để có được sự khác biệt giữa 2 ngày một cách dễ dàng.

Ví dụ, chúng ta có thể viết:

const start = moment("2000-11-03");
const end = moment("2001-11-04");
const diff = end.diff(start, "days")
console.log(diff)Code language: JavaScript (javascript)

Tôi chỉ cần chuyển các chuỗi ngày vào hàm moment

Sau đó, tôi gọi diff để có được sự khác biệt giữa ngày khoảnh khắc nó được gọi vào và đối tượng ngày khoảnh khắc mà tôi đã chuyển vào.

Đối số thứ 2 là đơn vị của sự khác biệt mà bạn muốn trả về.

Vì vậy, diff cũng là 366 vì 2 ngày khác nhau 366 ngày.

Kết luận

Bạn có thể sử dụng chuỗi JavaScript gốc và các phương thức ngày tháng để tính toán số ngày sự khác biệt giữa 2 ngày.

Cảm ơn bạn đã theo dõi bài viết!

Các bạn có thể tham khảo các bài viết hay về JavaScript tại đây.


Hãy tham gia nhóm Học lập trình để thảo luận thêm về các vấn đề cùng quan tâm.

TỔNG HỢP TÀI LIỆU HỌC LẬP TRÌNH CƠ BẢN CHO NGƯỜI MỚI BẮT ĐẦU

KHOÁ HỌC BOOTCAMP JAVA/JAVASCRIPT/PHP TRỞ THÀNH LẬP TRÌNH VIÊN TRONG 5-6 THÁNG

Leave a Reply

Your email address will not be published. Required fields are marked *