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

如何使用Moment.js判断指定时间是否处于两个给定时间之间

检查时间是否处于跨午夜的时间段内

你的代码存在两个核心问题:

  • 把moment实例转换成了格式化后的字符串,丢失了时间的可比较性
  • 没有处理跨午夜时间段(比如18:45到次日09:30)的特殊判断逻辑

直接调用isBetween会返回false,因为moment默认认为起始时间应该早于结束时间,而18:45显然晚于09:30,它会把这个时间段当成无效顺序,自然无法正确判断19:00是否在区间内。

正确实现方式

保留moment实例不转成字符串,同时针对跨午夜的情况做特殊处理:

import moment from "moment";

// 直接创建moment时间实例,不要格式化
const startTime = moment("18:45", "HH:mm");
const endTime = moment("09:30", "HH:mm");
const myTime = moment("19:00", "HH:mm");

let isInRange;
// 判断是否是跨午夜的时间段
if (startTime.isAfter(endTime)) {
  // 跨天:时间大于等于startTime 或者 小于等于endTime
  isInRange = myTime.isAfter(startTime) || myTime.isBefore(endTime);
} else {
  // 正常时间段:直接用isBetween
  isInRange = myTime.isBetween(startTime, endTime);
}

console.log(isInRange); // 输出 true

关键说明

  • 使用HH:mm格式而非hh:mm,HH代表24小时制,避免AM/PM的转换干扰
  • 始终保留moment实例进行时间比较,不要转成字符串,否则会丢失时间的数值属性
  • 跨午夜场景下,需要拆分判断逻辑:时间落在当天的后半段(startTime到24:00)或者次日的前半段(00:00到endTime)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 06:11:00