微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何将 moment.updateLocale() 迁移到 date-fns 语言环境方法?

如何解决如何将 moment.updateLocale() 迁移到 date-fns 语言环境方法?

这是我的代码快照以获取更多详细信息:

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 })
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。