如何使用moment.js比较两个日期,仅匹配日相同即可无需限制年份一致
Moment.js 自定义日期匹配实现方案
你需要的对比逻辑可以通过以下两种方案实现,可根据实际需求选择:
方案1:仅对比「日期数字(几号)」,忽略年份、月份
如果只要两个日期的「几号」数值相同就返回true(比如4月17和5月17也会返回true),直接提取两个moment对象的date()属性对比即可:
// 比较方法 function isDateNumSame(date1, date2) { return date1.date() === date2.date(); } // 调用示例 if (isDateNumSame(date1, date2)) { c.log('same') } else { c.log('not same') }
方案2:对比「月份+日期」,仅忽略年份
这是更符合你给出示例的需求:只要是每年同一个月的同一天就返回true(比如所有年份的4月17都匹配,4月17和5月17不匹配),两种实现可选:
实现方式1:分别提取属性对比
function isSameMonthDay(date1, date2) { // moment的month()返回值为0~11,和原生Date月份逻辑一致,直接对比即可 return date1.month() === date2.month() && date1.date() === date2.date(); }
实现方式2:统一年份后调用moment原生方法
function isSameMonthDay(date1, date2) { // 克隆对象避免修改原日期,统一设置为任意相同年份后按日粒度对比 return date1.clone().year(2000).isSame(date2.clone().year(2000), 'day'); }
两种实现效果完全一致,测试你给出的场景均符合预期:
- 2019年4月17和2019年4月17:返回true
- 2029年4月17和2019年4月17:返回true
内容的提问来源于stack exchange,提问作者Petar
相关产品推荐
相关产品推荐

