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

为何setDate返回字符串?如何获取Date对象形式的指定日期

解决priorDate不是Date对象的问题

嘿,这个坑我之前也踩过,咱们来把它捋明白!

问题出在哪?

你代码里用到的setDate()方法,它的返回值是时间戳(从1970年1月1日至今的毫秒数),而不是修改后的Date对象本身。当你写new Date().setDate(...)时,虽然临时创建的Date对象确实被改成了30天前的日期,但你拿到的是它返回的毫秒数字(不是字符串哦,可能你在控制台查看时误以为是字符串了),所以priorDate自然不是Date类型。

两种靠谱的修复方案

方案1:先创建实例,再修改日期(推荐)

这种方式最直观,先复制当前日期到新的Date实例,再调用setDate修改它,而且不会影响原有的today对象:

var today = new Date();
var priorDate = new Date(today); // 复制today的日期状态
priorDate.setDate(today.getDate() - 30); // 修改priorDate为30天前

这样priorDate就是一个完整的Date对象,你可以直接调用它的各种方法(比如getFullYear()、toLocaleDateString())。

方案2:用时间戳生成新Date对象

既然setDate()返回的是时间戳,那我们可以把这个时间戳传给Date构造函数,生成新的Date对象:

var today = new Date();
var priorTimestamp = today.setDate(today.getDate() - 30);
var priorDate = new Date(priorTimestamp);

注意:这个方案里的today会被setDate()修改成30天前的日期,如果之后还要用到today的原始值,就别用这个方法啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:18:21