如何在TypeScript中用一行代码创建Date对象并设置为昨日?
一行代码创建昨日日期的正确写法
你的两种写法都不可行,问题分别如下:
第一种写法:
yesterday = new Date().setDate(this.yesterday.getDate()-1);this.yesterday在赋值前还未定义,调用getDate()会直接抛出TypeError;setDate()方法的返回值是时间戳(数字类型),而非Date对象,最终yesterday会是一串数字,不是你需要的日期实例。
第二种写法:
yesterday = new Date ()=>{setDate(this.yesterday.getDate()-1)};
这是语法错误,你错误地将箭头函数和new Date()调用混合在一起,最终创建的是一个箭头函数对象,完全不是Date实例,而且内部的setDate也没有绑定到正确的Date上下文,根本无法运行。
下面是几种正确的一行实现方式:
方法1:时间戳直接计算(简洁但注意时区)
一天对应86400000毫秒,用当前时间戳减去该值即可得到昨日的时间戳,再转为Date对象:
const yesterday = new Date(Date.now() - 86400000);
注:这种方法在夏令时切换等时区调整日可能出现偏差,适合对时区精度要求不高的场景。
方法2:立即执行函数(时区友好)
通过立即执行函数创建Date实例,修改日期后返回该实例,确保结果是正确的Date对象:
const yesterday = (date => { date.setDate(date.getDate() - 1); return date; })(new Date());
进一步精简为一行:
const yesterday = (d => (d.setDate(d.getDate()-1), d))(new Date());
方法3:利用setDate的返回值
setDate()会返回修改后的时间戳,将该时间戳传入new Date()即可得到目标Date对象:
const yesterday = new Date(new Date().setDate(new Date().getDate() - 1));
这种写法直观易懂,虽然会创建两个Date实例,但日常场景下性能可以忽略。
内容的提问来源于stack exchange,提问作者AkiZukiLenn
相关产品推荐
相关产品推荐

