如何使用date-fns在TypeScript中将ISO8601时长转换为秒数
使用date-fns在TypeScript中把ISO8601时长字符串转为秒数
前置准备
首先确保项目中已经安装date-fns,该库原生支持TypeScript类型定义,无需额外安装类型包:
npm install date-fns # 或用yarn/pnpm pnpm add date-fns
实现代码
核心用date-fns提供的parseISODuration方法解析ISO8601时长字符串,再把各时间单位换算为秒求和即可:
import { parseISODuration } from 'date-fns' /** * 将ISO8601时长字符串转换为总秒数 * @param isoDuration ISO8601格式的时长字符串,如"PT1M14S" * @returns 总秒数(整数) * @throws 输入非法ISO时长字符串时会抛出错误 */ function convertISODurationToSeconds(isoDuration: string): number { const duration = parseISODuration(isoDuration) // 各时间单位换算为秒求和,可根据你的业务场景决定是否保留年/月/日等大单位的换算逻辑 return Math.floor( (duration.years || 0) * 31536000 + (duration.months || 0) * 2592000 + // 按每月30天计算,如无需可删除 (duration.days || 0) * 86400 + (duration.hours || 0) * 3600 + (duration.minutes || 0) * 60 + (duration.seconds || 0) ) }
示例测试
// 测试示例输入 const result = convertISODurationToSeconds("PT1M14S") console.log(result) // 输出 74
注意事项
- 如果你的业务场景中不会出现年、月、日级别的时长,可以删除对应换算逻辑减少冗余
- 输入非法ISO8601时长字符串时
parseISODuration会抛出错误,建议根据业务需要在外层加try/catch捕获处理
内容的提问来源于stack exchange,提问作者Aishwer Sharma
相关产品推荐
相关产品推荐

