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
相关产品推荐
相关产品推荐

