【问题标题】:Comparing the current date with a date received from an api response [duplicate]将当前日期与从 api 响应收到的日期进行比较 [重复]
【发布时间】:2025-12-28 16:35:06
【问题描述】:

我想将我从 API 收到的日期与当前日期进行比较,如果超过 14 天。我收到的日期就是这种格式。

"date": "2018-08-07T14:17:24+02:00"

【问题讨论】:

  • 为什么不使用momentjs?
  • 有问题吗?您尝试过的东西没有按预期工作?
  • @chazsolo 问题是如何实际执行此操作。我不知道如何比较天和月和年,这对我来说有点混乱。
  • 应该考虑时间吗?例如。 2018-08-07T14:17:24+02:00 到 2018-08-08T00:00:00+02:00 是一天吗?还是您想要 24 小时时段?那么跨越夏令时边界呢?主机的夏令时规则会影响结果,而不是日期的来源。

标签: javascript reactjs ecmascript-6


【解决方案1】:

您也可以使用库date-fns 进行计算。它有一个smaller bundle size than Moment

function exceedsDays(date, numberOfDays) {
  var today = dateFns.startOfToday();
  var diff = dateFns.differenceInDays(today, dateFns.parse(date));
  return diff > numberOfDays;
}

var date = "2018-08-07T14:17:24+02:00";
var result = exceedsDays(date, 14);

console.log(result)
<script src="https://cdnjs.cloudflare.com/ajax/libs/date-fns/1.29.0/date_fns.min.js"></script>

【讨论】:

    【解决方案2】:

    let dateFrom = new Date("2018-08-07T14:17:24+02:00").getTime();
    let today = new Date().getTime();
    let days14 = 1000 * 60 * 60 * 24 * 14;
    
    if(today - dateFrom > days14){  }

    【讨论】:

    • 并不是那么简单,因为并非所有的日子都是 24 小时长的夏令时。但是,如果 OP 只是想处理日期而不是精确的小时、分钟和秒,则将小时设置为零并四舍五入应该可以解决这个问题。 ;-)
    【解决方案3】:

    如果你使用 momentjs,你可以做类似的事情。这将返回一个布尔值。您可以稍后重用此功能以检查是否超过 30 天等。只需更改第二个参数。第一个是您要检查的日期。默认 moment() 现在返回,这就是我们现在不需要创建日期的原因。

    const oldDate = '2018-08-07T14:17:24+02:00';
    
    function exceedNumOfDays(date, numOfDays) {
      return moment().diff(new Date(date), 'days') > numOfDays;
    }
    
    exceedNumOfDays(oldDate, 14)
    

    我把代码放在codesandbox上,你可以在左下角看到控制台。 https://codesandbox.io/s/oo967v83xq

    【讨论】:

    • 谢谢,您的代码似乎是正确的,但是如果我只想在当前日期和接收日期之间的差异小于或等于 14 天时才返回 true 怎么办?
    • 您可以为它们创建相同类型的功能。为什么我喜欢这种方式,因为您抽象了库逻辑以匹配您的。因此,如果您将 lib 更改为类似 date-fns,您只需更改函数的实现即可。