JavaScript获取当天及前一天日期的方法

2026-07-24 20:31:27 53 次阅读

JavaScript在处理日期相关逻辑时,最常见的需求之一就是获取当天日期以及前一天日期。尤其在数据统计、日志分析、报表生成、接口参数处理等场景中,这类操作几乎是基础能力。JavaScript 提供的原生 Date 对象虽然功能完整,但如果不理解其底层机制,很容易在时区、月份边界和格式化输出上踩坑。


一、JavaScript日期对象的基本原理

JavaScript中的日期对象基于时间戳(Unix Time),本质是从1970年1月1日UTC开始计算的毫秒数。

JavaScript
const now = new Date();

Date对象默认使用当前系统时区,因此在不同环境中可能出现显示差异。


二、获取当天日期的标准写法

获取当天日期通常分为两种需求:

仅获取日期对象
获取格式化后的字符串

方式一:直接获取当前日期对象

JavaScript
const today = new Date();

方式二:格式化为 YYYY-MM-DD

JavaScript
const date = new Date();

const year = date.getFullYear();
const month = String(date.getMonth() + 1).padStart(2, '0');
const day = String(date.getDate()).padStart(2, '0');

const todayStr = `${year}-${month}-${day}`;

这种方式适用于接口参数传递或数据库查询。


三、获取前一天日期的核心方法

前一天日期的计算本质是时间戳减法,而不是简单的“日 - 1”。

JavaScript
const date = new Date();
date.setDate(date.getDate() - 1);

格式化前一天日期

JavaScript
const date = new Date();
date.setDate(date.getDate() - 1);

const year = date.getFullYear();
const month = String(date.getMonth() + 1).padStart(2, '0');
const day = String(date.getDate()).padStart(2, '0');

const yesterdayStr = `${year}-${month}-${day}`;

这种写法会自动处理跨月、跨年情况。


四、推荐封装:通用日期获取函数

在实际项目中,建议封装通用方法,提高复用性。

JavaScript
function formatDate(date) {
const year = date.getFullYear();
const month = String(date.getMonth() + 1).padStart(2, '0');
const day = String(date.getDate()).padStart(2, '0');

return `${year}-${month}-${day}`;
}

const today = formatDate(new Date());

const yesterday = formatDate(
new Date(new Date().setDate(new Date().getDate() - 1))
);

这种封装方式适用于中大型项目的统一日期管理。


五、使用时间戳方式获取前一天(更稳定)

相比直接操作Date对象,时间戳方式更直观:

JavaScript
const now = Date.now();
const oneDay = 24 * 60 * 60 * 1000;

const today = new Date(now);
const yesterday = new Date(now - oneDay);

优点:

逻辑清晰
避免链式Date修改带来的副作用
更适合高频计算场景


六、避免常见坑:时区与跨天问题

日期处理最容易出问题的地方是时区。

例如:

UTC时间与本地时间差异
夏令时变化
服务器与前端时间不一致

建议:

统一使用本地时间或UTC时间
后端返回统一时间戳
前端仅做格式化展示


七、处理跨月与跨年边界

JavaScript Date对象会自动处理边界:

JavaScript
const date = new Date('2025-03-01');
date.setDate(date.getDate() - 1);

console.log(date); // 2025-02-28

无需手动判断月份天数,这是Date API的优势之一。


八、实际业务中的应用场景

获取当天及前一天日期通常用于:

数据报表对比
每日统计任务
接口参数过滤
缓存Key生成
日志分区查询

例如:

JavaScript
const today = formatDate(new Date());
const yesterday = formatDate(new Date(Date.now() - 86400000));

fetch(`/api/stat?today=${today}&yesterday=${yesterday}`);

九、进阶方案:使用第三方日期库

在复杂业务中,可以使用:

dayjs
moment.js(已逐渐被替代)

以dayjs为例:

JavaScript
import dayjs from 'dayjs';

const today = dayjs().format('YYYY-MM-DD');
const yesterday = dayjs().subtract(1, 'day').format('YYYY-MM-DD');

可读性更强,维护成本更低。


十、最佳实践总结

优先使用时间戳进行日期计算
避免直接修改原Date对象导致副作用
统一日期格式化逻辑
跨项目建议封装工具函数
复杂场景使用成熟日期库

合理处理日期逻辑可以显著降低线上bug概率,尤其在数据驱动型系统中,这类基础能力的稳定性直接影响整体业务质量。