在JavaScript中不使用第三方库为日期添加当前时间的实现方法
给指定日期添加当前时间的正确实现方法
你的代码存在几个问题,导致无法正确生成目标日期:
- 拼写错误:
minuts应为minutes,这个错误会导致无法获取正确的分钟数 - 直接拼接
dd的字符串表示会生成无效日期格式:new Date("2022-11-21")的toString结果并非ISO标准的日期部分,拼接后得到的字符串无法被Date正确解析 - 混淆本地时间与UTC时间:
getHours()等方法获取的是本地时间,但你拼接时加上了Z(表示UTC时间),会导致时间偏移
正确实现方式(本地时间)
直接操作Date对象的方法,将指定日期的时分秒毫秒替换为当前时间的对应值:
// 获取当前时间 const now = new Date(); // 指定目标日期 const targetDate = new Date("2022-11-21"); // 替换时分秒毫秒为当前本地时间的值 targetDate.setHours(now.getHours()); targetDate.setMinutes(now.getMinutes()); targetDate.setSeconds(now.getSeconds()); targetDate.setMilliseconds(now.getMilliseconds()); console.log(targetDate.toISOString()); console.log(targetDate.getDate()); // 输出21,符合预期
正确实现方式(UTC时间)
如果需要生成UTC标准的日期(带Z后缀),使用UTC相关的设置方法:
const now = new Date(); const targetDate = new Date("2022-11-21"); // 替换为当前UTC时间的时分秒毫秒 targetDate.setUTCHours(now.getUTCHours()); targetDate.setUTCMinutes(now.getUTCMinutes()); targetDate.setUTCSeconds(now.getUTCSeconds()); targetDate.setUTCMilliseconds(now.getUTCMilliseconds()); console.log(targetDate.toISOString()); console.log(targetDate.getUTCDate()); // 输出21,符合预期
这种方式避免了字符串拼接带来的兼容性问题,同时明确区分了本地时间和UTC时间的处理逻辑,结果更可靠。
内容的提问来源于stack exchange,提问作者RyE Language
相关产品推荐
相关产品推荐

