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

JS技术问题:获取指定时间戳日期却返回当前日期

问题分析与修复方案

嘿,我来帮你理清楚这个问题——你现在的代码问题主要出在对Date对象方法的理解和时间戳的处理上,咱们一步步来拆解:

首先,你拿到的"1522843537"是Unix时间戳(以秒为单位),但你的代码犯了两个关键错误:

  1. 直接把字符串时间戳传给Date构造函数,而且没转成毫秒(Date构造函数只认毫秒级时间戳)
  2. 错误使用了getMonth()、getDate()这些方法——它们是获取日期组件的,根本不是用来设置日期的!这就是为什么你得到的是当前日期,因为regDate = new Date()创建的是当前时间的对象,后面的方法调用完全没起作用。

带详细注释的正确代码

// 1. 原始的Unix时间戳字符串(后端传的是秒数,Date需要毫秒,所以后面要×1000)
const timestampStr = "1522843537";
// 2. 先把字符串转成数字,再乘以1000转换成毫秒级时间戳,传给Date构造函数
const targetDate = new Date(parseInt(timestampStr) * 1000);

// 3. 从Date对象中提取需要的日期组件
const day = targetDate.getDate(); // 获取日期(范围1-31,这就是你要的4)
const month = targetDate.getMonth() + 1; // 获取月份(注意:getMonth()返回0-11,所以要+1才是实际的1-12)
const year = targetDate.getFullYear(); // 获取完整年份(比如2018)

// 4. 输出结果,验证一下
document.write(`<p style='color: #fff'>日: ${day}, 月: ${month}, 年: ${year}</p>`);

为什么你的代码返回当前日期?

你写的var regDate = new Date();是直接创建了一个当前时间的Date对象,而regDate.getDate(regDateOriginal)这种写法完全无效——getDate()方法不接受任何参数,它只会返回当前这个Date对象的日期天数,所以你得到的是运行代码当天的日期21,和你传入的时间戳完全没关系。

额外小技巧:格式化DD/MM/YYYY

如果你需要把提取出的日、月、年转换成你提到的DD/MM/YYYY格式,可以用下面的代码:

// 用padStart保证日和月都是两位数(比如4变成04)
const formattedDay = String(day).padStart(2, '0');
const formattedMonth = String(month).padStart(2, '0');
const formattedDate = `${formattedDay}/${formattedMonth}/${year}`;
console.log(formattedDate); // 输出 "04/04/2018"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:26:56