You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Moment.js判断日期是否为过去日期(包含当日)

判断当日及过去日期的Moment.js实现方案

嘿,我懂你要解决的问题——要写一个判断条件,让目标日期是当日或者过去的日期时返回true,否则返回false对吧?刚好Moment.js有现成的方法可以搞定这个,我来给你拆解清楚:

核心方法:isSameOrBefore()

Moment.js的isSameOrBefore()方法就是专门用来判断一个日期是否等于或早于另一个日期的,完全匹配你的需求。不过要注意一个细节:如果直接比较的话会精确到毫秒,所以我们需要指定按「天」来比较,忽略时分秒的差异。

示例代码

假设你的当日日期已经定义为:

const todays_date = moment("2020-02-19T00:00:00.000Z");

要判断任意目标日期targetDate是否符合条件,代码如下:

// 按「天」维度比较,包含当日
const isPastOrToday = targetDate.isSameOrBefore(todays_date, 'day');

为什么要加'day'参数?

如果不指定这个参数,Moment.js会精确到毫秒对比。比如你用moment("2020-02-19T10:00:00.000Z")和todays_date(当日零点)直接比较的话,会返回false,因为10点的时间戳比零点大。加上'day'后,Moment.js会忽略时分秒,只比较年、月、日,这样当天的任何时间点都会被判定为符合条件。

手动时间戳对比方案(备选)

如果你不想用内置方法,也可以通过时间戳来手动判断,思路是把当日日期设为当天的最后一刻,然后对比目标日期的时间戳是否小于等于这个值:

// 获取当日UTC时间的最后一刻(23:59:59.999Z)
const endOfToday = todays_date.endOf('day');
// 对比时间戳
const isPastOrToday = targetDate.valueOf() <= endOfToday.valueOf();

时区注意事项

因为你的todays_date是UTC格式的,如果你处理的目标日期是本地时区的,记得先统一时区再比较,比如都转成UTC:

const isPastOrToday = targetDate.utc().isSameOrBefore(todays_date, 'day');

测试用例验证

  • 目标日期为moment("2020-02-19T15:30:00.000Z") → 返回true(当日)
  • 目标日期为moment("2020-02-18T23:59:59.000Z") → 返回true(过去日期)
  • 目标日期为moment("2020-02-20T00:00:00.000Z") → 返回false(未来日期)

内容的提问来源于stack exchange,提问作者vikas95prasad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 16:12:46