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

如何使用Date-FNS向函数传递日期?为何传参后分钟差返回NaN?

嘿,我来帮你解决这两个关于Date-FNS的问题~

1. 如何向Date-FNS库的函数传递日期?

Date-FNS的绝大多数日期计算函数(比如differenceInMinutes)都接受原生Date对象作为核心参数,你可以通过以下几种常见方式传递有效的日期值:

  • 直接创建原生Date对象传入:
    // 示例:创建2024年5月1日的日期对象(注意:月份是0-based,4对应5月)
    const targetDate = new Date(2024, 4, 1);
    differenceInMinutes(targetDate, new Date());
    
  • 传入符合ISO 8601标准的日期字符串:
    differenceInMinutes('2024-05-01T12:00:00', new Date());
    
  • 用Date-FNS自带的工具函数解析日期字符串:
    import { parseISO } from 'date-fns';
    differenceInMinutes(parseISO('2024-05-01'), new Date());
    
  • 部分Date-FNS工具函数还支持直接传入年、月、日等离散参数(比如addDays),但核心计算函数还是以Date对象为主要输入形式。
2. 为什么调用getDateTime(2018, 3, 4, 15, 30, 0)时返回NaN?

问题核心在于函数参数定义和调用方式不匹配:
你定义的getDateTime函数只接收一个customDate参数,但调用时却传入了6个离散参数(年、月、日、时、分、秒)。此时customDate只会取到第一个值2018,new Date(2018)会把这个数字当作毫秒级时间戳,对应1970年1月1日之后2018毫秒的时间——虽然这是一个有效日期,但显然不是你想要的2018年3月4日。如果遇到无法解析为有效日期的输入,differenceInMinutes就会返回NaN。

给你两种解决思路:

方法一:修改函数,适配多参数输入

调整函数参数定义,单独接收年、月、日等参数,再用来创建正确的Date对象:

getDateTime: function (year, month, day, hour, minute, second) {
  // 重要提醒:Date构造函数的月份是0-based,3对应四月,如果你的需求是3月,要改成2
  const customDate = new Date(year, month, day, hour, minute, second);
  const minutesDifference = differenceInMinutes(customDate, new Date());
  console.log('minutesDifference: ' + minutesDifference);
}

这样调用getDateTime(2018, 3, 4, 15, 30, 0)就能得到预期结果了(记得确认月份是否需要调整)。

方法二:调用时直接传入Date对象

保持函数原有定义不变,调用时先创建好目标Date对象再传入:

// 同样注意月份的0-based规则
getDateTime(new Date(2018, 3, 4, 15, 30, 0));

此时customDate是一个标准的Date对象,differenceInMinutes就能正常计算两个日期的分钟差值了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:04:21