0

我正在使用 Date-FNS 库来获取两个日期之间的差异(以分钟为单位)。如果日期像这样过去,为什么minutesDifference返回NaNgetDateTime(2018, 3, 4, 15, 30, 0):?

getDateTime: function (customDate) { 
var minutesDifference = differenceInMinutes(new Date(customDate), new Date()) 
console.log('minutesDifference: ' + minutesDifference) 
}

但这有效(没有customDate的硬编码版本):

getDateTime: function () { 
var minutesDifference = differenceInMinutes(new Date(2018, 3, 4, 15, 30, 0), new Date())
console.log('minutesDifference: ' + minutesDifference) 
}

我需要找到一种将自定义日期传递给函数的方法。

4

1 回答 1

1

根据date-fns文档differenceInMinutes期望传递一个 Date 对象。在您的getDateTime函数中:

getDateTime: function (customDate) { 
  var minutesDifference = differenceInMinutes(new Date(customDate), new Date()) 
  console.log('minutesDifference: ' + minutesDifference) 
}

您正在传递new Date(customDate),并且在您正在传递的调用中getDateTime(2018, 3, 4, 15, 30, 0),因此分配给customDate的值是2018,并且您正在有效地调用:

differenceInMinutes(new Date(2018), new Date());

wherenew Date(2018)在 1970-01-01 开始后创建 2,018 毫秒的日期。

我需要找到一种将自定义日期传递给函数的方法。

确保customDate是一个 Date 对象,所以你不能使用

getDateTime(2018, 3, 4, 15, 30, 0);

你需要使用:

getDateTime(new Date(2018, 3, 4, 15, 30, 0)); // 2018-04-04 15:30:00

您还需要在调用 dateFns 函数前加上dateFns.,例如

// https://cdnjs.cloudflare.com/ajax/libs/date-fns/1.29.0/date_fns.min.js

function getDateTime(customDate) {
  var minutesDifference = dateFns.differenceInMinutes(new Date(customDate), new Date());
  console.log('minutesDifference: ' + minutesDifference) 
}

 getDateTime(new Date(2018, 3, 4, 15, 30, 0)); // 2018-04-04 15:30:00
 // Comparison in plain JS
 console.log(`Plain js: ${(new Date(2018, 3, 4, 15, 30, 0) - Date.now())/6e4 | 0}`);
<script src="https://cdnjs.cloudflare.com/ajax/libs/date-fns/1.29.0/date_fns.min.js"></script>
<script>dateFns.isToday(new Date())</script>

于 2018-04-09T21:33:53.080 回答