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

如何修改一天的默认起止时间?原生JavaScript及Moment.js实现方法

自定义日时段(10AM至次日9:59:59)的实现方案

完全可以通过原生JavaScript Date或Moment.js实现自定义的一天时段规则,核心是基于原生时间API封装业务逻辑,将“一天”的范围从自然日(00:00-23:59:59)替换为你需要的10AM到次日9:59:59。

原生JavaScript实现示例

你可以封装函数来获取指定日期对应的自定义日起止时间,或者判断任意时间所属的自定义日范围:

// 获取指定日期对应的自定义日起止时间
function getCustomDayRange(date) {
  const target = new Date(date);
  const hours = target.getHours();
  const start = new Date(target);
  const end = new Date(target);

  if (hours >= 10) {
    // 当前时间在10AM及之后,自定义日从当天10AM到次日9:59:59
    start.setHours(10, 0, 0, 0);
    end.setDate(end.getDate() + 1);
    end.setHours(9, 59, 59, 999);
  } else {
    // 当前时间在10AM之前,自定义日从前一天10AM到当天9:59:59
    start.setDate(start.getDate() - 1);
    start.setHours(10, 0, 0, 0);
    end.setHours(9, 59, 59, 999);
  }

  return { start, end };
}

// 测试示例:当前时间为2024-05-20 08:30:00
const testDate = new Date('2024-05-20T08:30:00');
const range = getCustomDayRange(testDate);
console.log(range.start); // 2024-05-19T10:00:00.000Z
console.log(range.end); // 2024-05-20T09:59:59.999Z

如果需要判断某个时间是否属于指定自定义日的范围,可以用这个函数:

function isInCustomDay(checkDate, customDayStart) {
  const customDayEnd = new Date(customDayStart);
  customDayEnd.setDate(customDayEnd.getDate() + 1);
  customDayEnd.setHours(9, 59, 59, 999);
  
  return checkDate >= customDayStart && checkDate <= customDayEnd;
}

Moment.js实现示例

借助Moment.js的链式API,实现逻辑和原生一致,但代码更简洁:

// 获取指定moment对象对应的自定义日起止时间
function getCustomDayRangeMoment(momentObj) {
  const hours = momentObj.hours();
  let start, end;

  if (hours >= 10) {
    start = momentObj.clone().hour(10).minute(0).second(0).millisecond(0);
    end = momentObj.clone().add(1, 'day').hour(9).minute(59).second(59).millisecond(999);
  } else {
    start = momentObj.clone().subtract(1, 'day').hour(10).minute(0).second(0).millisecond(0);
    end = momentObj.clone().hour(9).minute(59).second(59).millisecond(999);
  }

  return { start, end };
}

// 测试示例:指定时间为2024-05-20 14:00:00
const testMoment = moment('2024-05-20T14:00:00');
const range = getCustomDayRangeMoment(testMoment);
console.log(range.start.format()); // 2024-05-20T10:00:00+08:00(根据时区自动调整)
console.log(range.end.format()); // 2024-05-21T09:59:59+08:00

这种自定义时段的核心是业务逻辑的封装,原生Date和Moment.js只是提供了时间操作的基础能力,只要明确自定义日的判断规则,就能轻松适配业务需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 01:40:33