如何使用moment.js遍历日期列表生成从零点开始的小时级时间范围
实现方案
完全可以通过遍历all数组结合moment.js的时间操作能力生成符合要求的range格式序列,具体实现思路和代码如下:
核心实现思路
- 遍历
all数组中的每个日期字符串,先将其转换为moment可识别的时间对象 - 对每个时间对象,取其对应日期的UTC零点作为生成序列的起始时间
- 以该时间对象本身的小时数作为序列的结束边界,包含结束时间对应的整点
- 从起始时间开始,逐次加1小时,每次生成对应格式的时间字符串存入结果数组
- 所有日期的序列拼接后即为目标range数组
注意事项
- 如果你的原始日期字符串是本地时区格式,需要先通过
moment.utc()方法统一转成UTC时间处理,避免时区偏差导致的日期错误 - 输出格式严格匹配示例中的
YYYY-MM-DDTHH:mm:ss.SSSZ即可
代码示例
// node环境下需先执行npm install moment引入依赖 const moment = require('moment'); const all = ['2021-04-26T08:00:00', '2021-04-27T10:00:00']; const generatedRange = []; all.forEach(dateStr => { // 转成UTC时间对象避免时区误差 const targetTime = moment.utc(dateStr); // 取当日零点作为序列起始 let current = targetTime.clone().startOf('day'); // 取目标时间的小时数作为结束边界 const endHour = targetTime.hour(); while(current.hour() <= endHour) { generatedRange.push(current.format('YYYY-MM-DDTHH:mm:ss.SSSZ')); current.add(1, 'hour'); } }) // 输出结果和你示例中的range结构完全一致 console.log(generatedRange);
内容的提问来源于stack exchange,提问作者nobody
相关产品推荐
相关产品推荐

