首页 > 解决方案 > Javascript date-fns 更具体的 distanceInWords

问题描述

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

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

实际上它返回1 hourwithdistanceInWordStrict()about 1 hourwith distanceInWord()

所以我需要得到1h30这个。

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

标签: javascriptdatedate-fns

解决方案


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`;

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

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


推荐阅读