如何在JavaScript中合并两个日期的日期部分与时间部分得到新Date对象
实现方案
方案1:原生JavaScript实现(无需第三方库)
因为你的输入是标准ISO 8601格式的日期字符串,直接拆分拼接即可,性能最优:
// 示例输入 const startDateStr = "2021-05-25T09:50:40.603Z"; const startTimeStr = "2021-05-12T11:52:40.603Z"; // 拆分日期、时间部分 const datePart = startDateStr.split('T')[0]; // 提取结果:2021-05-25 const timePart = startTimeStr.split('T')[1]; // 提取结果:11:52:40.603Z // 拼接后转为合法Date对象 const combinedDate = new Date(`${datePart}T${timePart}`); // 可选:校验日期有效性 if (isNaN(combinedDate.getTime())) { console.error('输入日期格式异常,合并失败'); } else { console.log(combinedDate.toISOString()); // 输出:2021-05-25T11:52:40.603Z }
方案2:使用date-fns实现
如果你已经在项目中引入了date-fns,可以用日期对象操作的方式实现,兼容性更强:
import { parseISO, set } from 'date-fns'; // 示例输入 const startDateStr = "2021-05-25T09:50:40.603Z"; const startTimeStr = "2021-05-12T11:52:40.603Z"; // 先把字符串转为Date对象 const startDate = parseISO(startDateStr); const startTime = parseISO(startTimeStr); // 把startDate的时间部分替换为startTime的UTC时间 const combinedDate = set(startDate, { hours: startTime.getUTCHours(), minutes: startTime.getUTCMinutes(), seconds: startTime.getUTCSeconds(), milliseconds: startTime.getUTCMilliseconds() }); console.log(combinedDate.toISOString()); // 输出:2021-05-25T11:52:40.603Z
注意事项
- 两种方案输出的都是标准JavaScript Date对象,可直接用于后续的日期计算、格式化操作
- 所有操作都保留了原数据的UTC时区,不会因为本地时区差异出现日期偏移问题
- 如果输入的日期字符串不是标准ISO格式,建议先做格式校验再执行拆分操作
内容的提问来源于stack exchange,提问作者tonyf
相关产品推荐
相关产品推荐

