Cách so sánh chỉ ngày trong thời điểm .js


107

Tôi mới sử dụng moment.js. Tôi có một đối tượng ngày tháng và nó có một số thời gian được liên kết với nó. Tôi chỉ muốn kiểm tra xem ngày đó lớn hơn hoặc bằng ngày hôm nay, không bao gồm thời gian khi so sánh.

 var dateToCompare = 2015-04-06T18:30:00.000Z

Tôi chỉ muốn kiểm tra xem dateToCompare có bằng hoặc lớn hơn ngày hôm nay hay không. Tôi đã kiểm tra isSame of moment.js, nhưng nó dường như lấy chuỗi và chỉ phần ngày. Nhưng tôi không muốn chuyển đổi ngày của mình thành chuỗi hoặc thao tác thêm. Bởi vì tôi lo lắng rằng javascript có thể làm điều gì đó không mong muốn khi chuyển đổi ngày đó thành chuỗi (như thêm phần bù hoặc dst, v.v.), hoặc có thể tôi đã nhầm.

Mẫu isSame () từ tài liệu

moment('2010-10-20').isSame('2010-10-20');

Ngoài ra, tôi đang tìm kiếm một cái gì đó như isSame () và isAfter () được kết hợp thành một câu lệnh.

Tôi chỉ cần so sánh bằng cách sử dụng moment.js. Vui lòng không đề xuất so sánh ngày tháng với javascript thuần túy.

Câu trả lời:


183

Các tài liệu khá rõ ràng rằng bạn chuyển vào tham số thứ hai để chỉ định mức độ chi tiết.

Nếu bạn muốn giới hạn mức độ chi tiết ở một đơn vị không phải mili giây, hãy chuyển các đơn vị làm tham số thứ hai.

moment('2010-10-20').isAfter('2010-01-01', 'year'); // false
moment('2010-10-20').isAfter('2009-12-31', 'year'); // true

Vì tham số thứ hai xác định độ chính xác và không chỉ có một giá trị duy nhất để kiểm tra, việc sử dụng ngày sẽ kiểm tra năm, tháng và ngày.

Đối với trường hợp của bạn, bạn sẽ chuyển 'day'làm tham số thứ hai.


1
Cảm ơn! có vẻ như tôi không phải chuyển đổi thành chuỗi. Nhưng chúng ta có bất kỳ phương pháp phổ biến cho isSame () và isAfter ()
NoobGeek

2
Tôi đã sử dụng nó rồi. Cảm ơn! chỉ muốn xem liệu có một chức năng chung, không phải là nó khó sử dụng cả hai.
NoobGeek

@kabirbaidhya, trước khi thực hiện các chỉnh sửa không mong muốn khá lớn, bạn nên đăng nhận xét về các câu hỏi và câu trả lời về các vấn đề cần lưu ý. Tôi không cảm thấy rằng các chỉnh sửa bạn đã thực hiện là cần thiết, vì vậy tôi đã lùi chúng lại. Nếu bạn cảm thấy rằng thông tin này là quan trọng, vui lòng xem xét đăng câu trả lời của riêng bạn.
zzzzBov

4
Chỉ để bổ sung: "Vì tham số thứ hai xác định độ chính xác và không chỉ một giá trị duy nhất để kiểm tra, việc sử dụng ngày sẽ kiểm tra năm, tháng và ngày."
eveevans

6
@NoobGeek Hiện đã có isSameOrBefore () và isSameOrAfter () từ phiên bản 2.10.7 trở đi.
WhiteHotLoveTiger


6

Trong trường hợp của tôi, tôi đã làm theo mã sau để so sánh 2 ngày có thể nó sẽ giúp bạn ...

var date1 = "2010-10-20";
var date2 = "2010-10-20";
var time1 = moment(date1).format('YYYY-MM-DD');
var time2 = moment(date2).format('YYYY-MM-DD');
if(time2 > time1){
	console.log('date2 is Greter than date1');
}else if(time2 > time1){
	console.log('date2 is Less than date1');
}else{
	console.log('Both date are same');
}
<script src="https://momentjs.com/downloads/moment.js"></script>


6

Bạn có thể sử dụng startOf('day')phương pháp để so sánh chỉ ngày

Thí dụ :

var dateToCompare = moment("06/04/2015 18:30:00");
var today = moment(new Date());

dateToCompare.startOf('day').isSame(today.startOf('day'));
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.