如何修改现有Date变量的时分值?解决复制Date时出现的TypeError(formProps.date.getTime is not a function)问题
解决Uncaught TypeError: formProps.date.getTime is not a function问题
嘿,我来帮你搞定这个报错!你遇到的TypeError: formProps.date.getTime is not a function核心原因很明确:你以为formProps.date是JavaScript Date对象,但它实际上不是——大概率是日期选择器返回了字符串格式的日期(比如"2024-06-15"),而非真正的Date实例,所以调用getTime()才会报错。
先回应你第一个问题:用new Date(formProps.date.getTime())复制Date对象的方式本身是没问题的,但前提是formProps.date确实是Date类型的实例。
第一步:先确认formProps.date的真实类型
你之前打印了typeof(formProps.date),如果输出是"string"而不是"object",那就实锤了。哪怕toLocaleString()能正常输出日期格式,也不代表它是Date对象——有些环境会自动处理日期字符串,但本质还是字符串类型。
修复方案:先转成合法Date对象再操作
方案1:修复你原有的代码逻辑
先把formProps.date转换成真正的Date实例,再复制并设置时分:
// 先把formProps.date转为Date对象(兼容字符串/Date两种情况) const baseDate = typeof formProps.date === 'string' ? new Date(formProps.date) : formProps.date; // 校验日期是否有效(避免Invalid Date) if (isNaN(baseDate.getTime())) { console.error('请选择有效的日期'); return; } // 复制Date并设置时分(注意把用户输入的时分转成数字) const dateWithTime = new Date(baseDate.getTime()); dateWithTime.setHours(Number(formProps.hour), Number(formProps.minute));
方案2:更直观的直接组合日期部分(推荐)
不需要依赖getTime(),直接提取原日期的年、月、日,再和用户输入的时分组合成新Date,可读性更强:
const baseDate = typeof formProps.date === 'string' ? new Date(formProps.date) : formProps.date; if (isNaN(baseDate.getTime())) { console.error('请选择有效的日期'); return; } // 提取原日期的年、月、日(注意月份是0起始,不用+1) const year = baseDate.getFullYear(); const month = baseDate.getMonth(); const day = baseDate.getDate(); // 直接创建新Date,传入年、月、日、时、分 const dateWithTime = new Date(year, month, day, Number(formProps.hour), Number(formProps.minute));
额外注意点
- 用户输入的
formProps.hour和formProps.minute大概率是字符串类型,一定要用Number()转成数字,不然setHours或Date构造函数会出现异常。 - 如果需要严格校验时分的合法性(比如小时必须在0-23,分钟0-59),可以额外加判断,避免自动进位的情况(比如输入25小时会被转成次日1点)。
内容的提问来源于stack exchange,提问作者Flippingflop
相关产品推荐
相关产品推荐

