วิธีเปรียบเทียบเฉพาะวันที่ในช่วงเวลา js


110

ฉันยังใหม่กับ moment.js ฉันมีวัตถุวันที่และมีเวลาเชื่อมโยงกับมัน ฉันแค่ต้องการตรวจสอบว่าวันนั้นมากกว่าหรือเท่ากับวันนี้หรือไม่โดยไม่รวมเวลาที่เปรียบเทียบ

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

ฉันแค่ต้องการตรวจสอบว่า dateToCompare เท่ากับหรือมากกว่าวันที่ของวันนี้ ฉันได้ตรวจสอบ isSame of moment.js แล้ว แต่ดูเหมือนว่าจะใช้สตริงและเฉพาะส่วนวันที่ แต่ฉันไม่ต้องการแปลงวันที่เป็นสตริงหรือปรับแต่งเพิ่มเติม เนื่องจากฉันกังวลว่าจาวาสคริปต์อาจทำสิ่งที่ไม่คาดคิดเมื่อแปลงวันที่นั้นเป็นสตริง (เช่นการเพิ่มออฟเซ็ตหรือ dst ฯลฯ ) หรือฉันคิดผิด

ตัวอย่าง isSame () จาก docs

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

นอกจากนี้ฉันกำลังมองหาบางอย่างเช่น isSame () และ isAfter () รวมกันเป็นคำสั่งเดียว

ฉันต้องการเปรียบเทียบโดยใช้ moment.js เท่านั้นโปรดอย่าแนะนำการเปรียบเทียบวันที่ของจาวาสคริปต์แบบธรรมดา

คำตอบ:


184

เอกสารค่อนข้างชัดเจนว่าคุณส่งผ่านพารามิเตอร์ที่สองเพื่อระบุรายละเอียด

หากคุณต้องการ จำกัด ความละเอียดเป็นหน่วยอื่นที่ไม่ใช่มิลลิวินาทีให้ส่งผ่านหน่วยเป็นพารามิเตอร์ที่สอง

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

เนื่องจากพารามิเตอร์ตัวที่สองกำหนดความแม่นยำไม่ใช่แค่ค่าเดียวที่ต้องตรวจสอบการใช้วันจะตรวจสอบเป็นปีเดือนและวัน

สำหรับกรณีของคุณคุณจะส่งผ่าน'day'เป็นพารามิเตอร์ที่สอง


2
ขอบคุณ! ดูเหมือนว่าฉันไม่ต้องแปลงเป็นสตริง แต่เรามีวิธีการทั่วไปสำหรับ isSame () และ isAfter ()
NoobGeek

2
ฉันได้ใช้มันแล้ว ขอบคุณ! แค่อยากดูว่ามีฟังก์ชั่นทั่วไปหรือไม่ไม่ใช่ว่าใช้ทั้งสองอย่างยาก
NoobGeek

@kabirbaidhya ก่อนที่จะทำการแก้ไขจำนวนมากโดยไม่ได้ร้องขอจะถือว่าสุภาพที่จะโพสต์ความคิดเห็นเกี่ยวกับคำถามและคำตอบที่ระบุประเด็นปัญหา ฉันไม่รู้สึกว่าการแก้ไขที่คุณทำนั้นจำเป็นฉันจึงย้อนกลับไป หากคุณรู้สึกว่าข้อมูลนั้นสำคัญโปรดโพสต์คำตอบของคุณเอง
zzzzBov

4
เพื่อเสริม: "เนื่องจากพารามิเตอร์ที่สองกำหนดความแม่นยำไม่ใช่แค่ค่าเดียวที่ต้องตรวจสอบการใช้วันจะตรวจสอบเป็นปีเดือนและวัน"
eveevans

6
@NoobGeek ตอนนี้มี isSameOrBefore () และ isSameOrAfter () ตั้งแต่เวอร์ชัน 2.10.7 เป็นต้นไป
WhiteHotLoveTiger


6

ในกรณีของฉันฉันทำตามรหัสเพื่อเปรียบเทียบ 2 วันที่อาจช่วยคุณได้ ...

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

คุณสามารถใช้startOf('day')วิธีเปรียบเทียบเฉพาะวันที่

ตัวอย่าง:

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

dateToCompare.startOf('day').isSame(today.startOf('day'));
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.