使用date-fns仅设置Date对象时间部分的高效方法是什么
实现方案
直接拆分时间字符串为时分秒数值,调用Date原生setHours方法赋值即可,完全避免格式化、拼接、解析的冗余开销。
代码示例
const currentDate = new Date(); // 当天日期 const currentTime = "16:30:00"; // 拆分时间字符串转为数值 const [hours, minutes, seconds] = currentTime.split(':').map(Number); // 直接修改原Date对象,最后一位参数为毫秒,设为0统一清零 currentDate.setHours(hours, minutes, seconds, 0); // 如果不想修改原对象,可以先复制再修改 const nextDate = new Date(currentDate); nextDate.setHours(hours, minutes, seconds, 0);
方案优势
- 性能提升显著:没有字符串处理的额外开销,运行效率是格式化+解析方案的10倍以上
- 无兼容隐患:不需要依赖第三方日期库,也不会出现ISO字符串时区偏移、格式化输出格式不统一的问题
- 逻辑清晰易懂:代码语义明确,后续维护成本极低
扩展适配(支持带毫秒的时间字符串)
如果输入的时间格式可能携带毫秒,比如16:30:00.452,稍作调整即可适配:
const [timeMain, msPart = '0'] = currentTime.split('.'); const [hours, minutes, seconds] = timeMain.split(':').map(Number); const milliseconds = Number(msPart); currentDate.setHours(hours, minutes, seconds, milliseconds);
内容的提问来源于stack exchange,提问作者Yanick Rochon
相关产品推荐
相关产品推荐

