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

如何在TypeScript中用一行代码创建Date对象并设置为昨日?

一行代码创建昨日日期的正确写法

你的两种写法都不可行,问题分别如下:

  • 第一种写法:yesterday = new Date().setDate(this.yesterday.getDate()-1);

    1. this.yesterday在赋值前还未定义,调用getDate()会直接抛出TypeError;
    2. 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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 21:25:24