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

React中type=date的TextField获取Unix时间戳恒近似当前时间如何解决

问题原因

你代码中错误使用了Date.getTime()的API规则:getTime()是Date实例的无参方法,调用时只会返回当前Date实例对应的时间戳,传入任何参数都不会生效。
你写的new Date().getTime(e.target.value)逻辑中,new Date()没有传入你选中的日期参数,默认生成的是当前时间的Date实例,后续给getTime传值不会改变实例本身的时间,因此每次拿到的都是接近当前时间的时间戳,和你选中的日期无关。
另外还有一个隐性问题:React的useState更新是异步的,你在调用setStartDate之后直接打印startDate,拿到的还是当前渲染周期的旧值,也会对结果判断造成误导。

修复方案
  • 首先修正日期解析逻辑,把你选中的日期字符串传入Date构造函数,而不是传给getTime:
const startDateChange = (e) => {
  // 将选中的日期字符串传入Date构造函数生成对应实例
  const selectedUnixTime = Math.floor(new Date(e.target.value).getTime() / 1000);
  setStartDate(selectedUnixTime);
  // 要查看最新值请打印上面的临时变量,不要直接打印state
  console.log(selectedUnixTime);
};

const dueDateChange = (e) => {
  const selectedUnixTime = Math.floor(new Date(e.target.value).getTime() / 1000);
  setDueDate(selectedUnixTime);
  console.log(selectedUnixTime);
};
  • 可选优化:type为date的input返回值格式为YYYY-MM-DD,直接传入Date构造函数会默认按UTC时区解析,如果你需要按本地时区计算避免日期偏移,可以改成new Date(e.target.value + 'T00:00:00')。
  • 规范修复:你的两个TextField组件使用了相同的id属性standard-basic,不符合HTML id唯一的规范,建议分别修改为start-date-input、due-date-input这类唯一值。

内容的提问来源于stack exchange,提问作者chiko

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 21:36:00