首页 > 解决方案 > 具有两种独立 fromNow() 格式的 momentjs

问题描述

我正在尝试获得两种不同类型的relativeTime.

在一个文件中,我有:

moment.updateLocale('en', { relativeTime: {
  future: 'in %s',
  past: '%s ago',
  s:  'secs',
  ss: '%ss',
  m:  'a min',
  mm: '%dm',
  h:  '1h',
  hh: '%dh',
  d:  'a day',
  dd: '%dd',
  M:  'month',
  MM: '%dM',
  y:  'year',
  yy: '%dY'
}});

moment.utc(date).fromNow()

但这会在全局范围内应用于 moment 的所有用途,并且我希望该文件之外的 moment 的其他用途使用常规的较长文本格式用于fromNow().

我试过:

let g = moment()
g.updateLocale('en', { relativeTime: {
...

但它给出了错误g.updateLocale is not a function

有谁知道如何为日期格式设置两种不同relativeTime的设置?fromNow()

谢谢!

标签: javascriptreactjsmomentjs

解决方案


诚然,这不一定是最优雅的解决方案,但在您使用的要使用自定义语言环境格式的文件中,您可以:

  1. 将当前(原始默认)格式保存relativeTime到对象。
  2. 将语言环境的格式全局设置relativeTime为您的自定义格式。
  3. moment执行您需要执行的所有日期/字符串操作。
  4. 通过将语言环境的格式全局设置relativeTime回您保存的对象来恢复原始默认格式。

它看起来像这样:

const CONFIG_ORIG = moment().locale("en").localeData()._relativeTime;
const CONFIG_NEW = {
  future: "in %s",
  past: "%s ago",
  s: "secs",
  ss: "%ss",
  m: "a min",
  mm: "%dm",
  h: "1h",
  hh: "%dh",
  d: "a day",
  dd: "%dd",
  M: "month",
  MM: "%dM",
  y: "year",
  yy: "%dY"
};

const DATE = new Date();

// Original format displays: "a few seconds ago"
const string1 = moment.utc(DATE).fromNow();

moment.updateLocale("en", { relativeTime: CONFIG_NEW });
// Custom format displays: "secs ago"
const string2 = moment.utc(DATE).fromNow();

moment.updateLocale("en", { relativeTime: CONFIG_ORIG });
// Restored original format displays: "a few seconds ago"
const string3 = moment.utc(DATE).fromNow();

这是一个代码沙箱,它显示了这一点:

编辑 momentjs 语言环境


其他资源:


推荐阅读