Javascript date-fns 更具体 distanceInWords

Javascript date-fns more specific distanceInWords

我正在使用 distanceInWord 来了解两个日期之间有多少时间。但这并不是我想要的,因为我需要更具体。

例如,如果我有这个:1 January 2019 15:00:00 and 1 January 2019 16:30:00

实际上 returns 1 hourdistanceInWordStrict()about 1 hourdistanceInWord().

所以我需要 1h30 为此。

我该怎么做才能更具体? 1h30、2h15、3h45、2 天 5 小时等...

根据文档,您不能使用 distanceInWord 来做到这一点,因为它是为宽范围和短结果字符串创建的(about 7 years 而不是 7 years, 4 months, 7 weeks, 3 days and 5 seconds)。 您只能在 distanceInWordStrict 中强制单位 - 传递 {unit: 'm'} 作为第三个参数将输出 90 minutes.

但是您可以根据结果获取具有任何单位的日期之间的差异 - 格式如您所愿。像这样:

let result;

const date1 = '1 January 2019 15:00:00';
const date2 = '1 January 2019 16:30:00';

const minutes = Math.abs(differenceInMinutes(date1, date2));

if(minutes < 60) {
  result = distanceInWordsStrict(date1, date2, {unit: 'm'})
}
else {
  result = distanceInWordsStrict(date1, date2, {unit: 'h'});
  result = result.replace(/ hours?/, `h${minutes % 60}m`)
}

如果您从不超过几个小时,那么这将是一种更简单的格式化方法:

const hours = Math.abs(differenceInHours(date1, date2);
result = `${hours}h${minutes % 60}m`;

此外,您可以简单地获取以毫秒为单位的差异,从中创建一个日期对象并以您喜欢的任何方式设置格式。

请注意,如果您的差异超过一天,它将以小时数输出。所以最终的解决方案主要取决于你的各种可能范围。