javascript - 具有两种独立 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()
谢谢!
解决方案
诚然,这不一定是最优雅的解决方案,但在您使用的要使用自定义语言环境格式的文件中,您可以:
- 将当前(原始默认)格式保存
relativeTime
到对象。 - 将语言环境的格式全局设置
relativeTime
为您的自定义格式。 moment
执行您需要执行的所有日期/字符串操作。- 通过将语言环境的格式全局设置
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();
这是一个代码沙箱,它显示了这一点:
其他资源:
推荐阅读
- python - 如何在 Pytorch 的 CNN 中访问卷积层的权重和 L2 范数?
- sql - SQL Where Condition 无法找到不使用子选择或变量时找到的数据
- python - ImportError:无法从“kerastuner.engine.hyperparameters”导入名称“Hyperparameters”
- sql-server - 我可以覆盖单个列的列类型映射吗
- javascript - TypeError:解析数组时 LIST.map 不是函数
- typescript - Jest 中无意义的错误消息/堆栈跟踪
- arrays - PLSQL中数组中的不同值
- asp.net-mvc - 提交表单时如何存储登录用户的用户名?
- r - 脚本优化,主要是由于 for 循环 [R]
- javascript - Chrome扩展弹出窗口失去焦点?