如何修改一天的默认起止时间?原生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
相关产品推荐
相关产品推荐

