问题描述
index.js
import moment from 'moment'
moment.updateLocale('en',{
relativeTime: {
future: 'in %s',past: '%s ago',s: '%ds',m: '%dm',mm: '%dm',h: '%dh',hh: '%dh',d: '%dd',dd: '%dd',M: '%d month',MM: '%d months',y: '%d year',yy: '%d years'
}
})
function format ({ duration }) {
// How to return below output from date-fns module?
return moment.duration(duration).humanize()
}
console.log(format(60000))// output is --> 10m
cmd> node index.js
我想通过 date-fns local 做同样的事情。但是我没有看到任何 updateLocale 方法,也不知道如何进行映射。我在 moment.updateLocale({}) 对象中做的。
解决方法
在花费大量时间后找到了解决此问题的方法。问题是 date-fns formateDuration() 不支持映射传递的持续时间的同义词。所以定义了这个问题的解决方法。直到 date-fns 人们解决了这个问题。将下面的代码替换为你的它会得到相同的结果。
import { intervalToDuration,formatDuration } from 'date-fns'
// work around,until it fixed by date-fns libraray formatDuration method
const formatDistanceLocale = { xSeconds: '{{count}}s',xMinutes: '{{count}}m',xHours: '{{count}}h' }
const shortEnLocale = { formatDistance: (token,count) => formatDistanceLocale[token].replace('{{count}}',count) }
export function format ({ duration }) {
duration = intervalToDuration({ start: 0,end: duration })
return formatDuration(duration,{ format: ['hours','minutes','seconds'],locale: shortEnLocale })
}