如何使用Moment.js修改日期且保持Unix时间戳格式不变?
可以实现,你当前的用法存在几个常见错误,修正后即可实现仅修改日期部分、保留原有时间不变,最终输出仍然为Unix时间戳格式。
你的代码问题说明
- 每次调用
moment(currentTime)都会生成一个全新的Moment实例,你前三次set操作都是在不同的临时实例上执行,没有留存修改结果 - 你传入的是秒级Unix时间戳,直接传给
moment()方法会被识别为毫秒级时间戳,得到的时间完全错误,秒级时间戳需要用moment.unix()方法解析 - 原始的
currentTime是数字类型的原始值,不可能被Moment的方法直接修改,需要主动将修改后的Moment实例转成时间戳赋值给新变量
正确实现代码
示例1:实现你给出的示例需求(2021-08-20 3:00改为2021-08-27 3:00)
const currentTime = 1629442800; // 解析秒级时间戳,仅修改年月日,时分秒自动保留原有值 const modifiedTime = moment.unix(currentTime) .set('year', 2021) .set('month', 7) // 注意Moment月份为0索引,1月对应0,8月对应7 .set('date', 27) .unix(); // 转回秒级Unix时间戳 console.log(modifiedTime); // 输出1630047600,和你期望的结果完全一致
示例2:更简洁的批量set写法
const currentTime = 1629442800; const modifiedTime = moment.unix(currentTime).set({ year: 2013, month: 3, // 对应4月 date: 1 }).unix(); console.log(modifiedTime); // 输出修改后的秒级Unix时间戳
内容的提问来源于stack exchange,提问作者Jerry Seigle
相关产品推荐
相关产品推荐

