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

