JS技术问题:获取指定时间戳日期却返回当前日期
问题分析与修复方案
嘿,我来帮你理清楚这个问题——你现在的代码问题主要出在对Date对象方法的理解和时间戳的处理上,咱们一步步来拆解:
首先,你拿到的"1522843537"是Unix时间戳(以秒为单位),但你的代码犯了两个关键错误:
- 直接把字符串时间戳传给Date构造函数,而且没转成毫秒(Date构造函数只认毫秒级时间戳)
- 错误使用了
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
相关产品推荐
相关产品推荐

