使用Moment.js生成仅含小时与AM/PM的最近24小时数组问题
解决Moment.js生成最近24小时小时+AM/PM数组的问题
嘿,我来帮你搞定这个问题!你现在的核心问题是没用到Moment.js的格式化方法,所以返回的是完整的日期对象,而不是你需要的小时格式。下面是修正后的代码,我会给你详细解释:
完整可运行代码
var hoursPerDay = 24; var time = []; function timeOneDay() { // 用let声明i避免全局变量污染 for (let i = 0; i < hoursPerDay; i++) { // 从当前时间往前推i个小时,然后格式化目标格式 const formattedTime = moment().subtract(i, 'hours').format('h A'); time.push(formattedTime); } // 可选:如果需要数组按「24小时前 → 当前时间」的顺序排列,取消下面注释 // time = time.reverse(); } // 调用函数生成数组 timeOneDay(); // 打印结果看看 console.log(time);
关键细节说明
moment().subtract(i, 'hours'):这个方法用来获取当前时间往前推i小时的时间节点,这样就能遍历最近24小时的每个对应小时点。format('h A'):这是Moment.js的格式化核心:h:表示12小时制的小时数(不带前导零,比如1、10、12)A:表示大写的AM/PM标识(比如AM、PM)- 如果需要带前导零的12小时制(比如
01、10),把格式改成hh A就行
- 循环范围:把
i < hoursPerDay + 1改成i < hoursPerDay,不然会生成25个元素,不符合24小时的需求。 - 顺序调整:默认生成的数组是「当前小时 → 24小时前的小时」,如果需要反过来的顺序,就加上
time = time.reverse();。
注意事项
确保你的项目已经正确引入了Moment.js库,不然代码会抛出moment is not defined的错误哦。
内容的提问来源于stack exchange,提问作者Aalok Borkar
相关产品推荐
相关产品推荐

