You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

使用date-fns的differenceInDays计算日差结果少1天的问题排查

问题原因分析

你遇到的问题核心是对differenceInDays函数的逻辑理解有误——它计算的是两个日期之间完整的24小时周期数,而不是简单的日期数字相减。

看你的两个日期:

  • 结束日期:2020-08-12T07:22:03.498Z(8月12日早上7点22分)
  • 起始日期:2020-08-09T09:30:20.914Z(8月9日早上9点30分)

从8月9日9点30分到8月12日9点30分才是完整的3个24小时周期,但你的结束日期比这个时间早了2小时8分钟,还没到第三个完整的天数,因此函数返回2是符合它的设计逻辑的。

解决方案:忽略时间部分计算日期差

如果你想只基于年/月/日的日期数值来计算差值,不管具体时间,可以用date-fnsstartOfDay函数先把两个日期都转换为当天的起始时间(即00:00:00),再计算天数差:

import differenceInDays from "date-fns/differenceInDays";
import startOfDay from "date-fns/startOfDay";

console.log(
  differenceInDays(
    startOfDay(new Date("2020-08-12T07:22:03.498Z")),
    startOfDay(new Date("2020-08-09T09:30:20.914Z"))
  )
);

这段代码会返回你预期的3,因为startOfDay把两个日期都统一到了当天的0点,此时8月12日0点到8月9日0点正好是3个完整的天数周期。

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

火山引擎 最新活动