如何用moment.js将PThhHmmMssS格式(如PT7H45M26.75S)转时间戳?
PThhHmmMssS格式转时间戳:标准说明与moment.js实现方案
格式标准说明
你提到的PThhHmmMssS(示例:PT7H45M26.75S)是ISO 8601时长格式,属于国际标准化组织定义的时间表示规范:
P是Period(时段)的标识,用来开头声明这是一个时长值T是日期与时间部分的分隔符(这个示例里只有时间部分,所以T后面直接跟时间单位)H/M/S分别对应小时、分钟、秒单位,数值可以是整数或小数(比如26.75S代表26.75秒)
moment.js实现转换
moment.js完全支持解析这种ISO 8601时长格式,不过要注意:时长是相对值,时间戳是绝对时间点,所以需要结合一个基准时间来计算对应的时间戳,具体实现如下:
1. 基于当前时间生成时间戳
把时长加到当前时间上,得到对应的毫秒级时间戳:
// 解析目标时长 const targetDuration = moment.duration('PT7H45M26.75S'); // 计算当前时间加上时长后的时间戳 const timestamp = moment().add(targetDuration).valueOf();
2. 基于指定基准时间生成时间戳
如果需要以某个特定时间为基准(比如Unix纪元起点1970-01-01 00:00:00):
const targetDuration = moment.duration('PT7H45M26.75S'); // 以Unix纪元为基准,加上时长后转时间戳 const timestamp = moment.unix(0).add(targetDuration).valueOf();
3. 获取时长的总毫秒数(非时间戳)
如果只是需要这个时长对应的总毫秒数(不是绝对时间点),可以直接调用:
const totalMilliseconds = moment.duration('PT7H45M26.75S').asMilliseconds(); // 输出示例:27926750(7*3600000 + 45*60000 + 26.75*1000)
注意事项
确保你的moment.js版本在2.29.x及以上,旧版本可能对带小数秒的ISO时长格式支持不佳。
内容的提问来源于stack exchange,提问作者Rha Onthemoon
相关产品推荐
相关产品推荐

