You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改现有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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.01 00:27:33