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

JavaScript(React)中Unix时间戳转本地时间结果不准确如何解决

问题根因

转换结果偏差由两个代码错误共同导致:

  • 时间戳单位处理错误:Unix时间戳分秒级(10位长度)、毫秒级(13位长度)两种,你传入的参数1657745369979.82本身已经是毫秒级时间戳,对应2022年的时间点。原代码无差别对入参乘1000,相当于把时间值放大1000倍,直接把时间点偏移到了54501年,才会出现离谱的年份结果。
  • 日期格式化API参数传错:toLocaleString的第一个参数需要传入BCP 47规范的语言区域标签(比如en-US代表美式英文日期格式),原代码传入的是d.getDate()的返回值(也就是当月日期数值,属于非法参数),导致格式化逻辑异常,输出格式不符合预期。
修复代码

先对入参做单位判断,秒级时间戳才做乘1000转毫秒的处理,毫秒级时间戳直接使用;同时给toLocaleString传入正确的区域参数,匹配你需要的月/日/年、12小时制带时分秒的输出格式:

function convertDate(unixDate) {
  // 自动适配秒/毫秒级时间戳,先取整避免小数影响长度判断
  const msTime = String(Math.floor(unixDate)).length === 10 ? unixDate * 1000 : unixDate;
  const d = new Date(msTime);
  // 按美式日期格式输出,开启12小时制
  return d.toLocaleString('en-US', { hour12: true });
}

传入1657745369979.82调用上述函数,会返回7/13/2022, 8:49:29 PM,和预期结果一致。如果需要月份、日期不足两位时补前导零(比如把7月显示为07),可以自定义格式化逻辑补零,或者给toLocaleString传入更细的格式配置项。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 18:18:52