使用MomentJS,如果需要,我可以使用.locale
(或旧版本中的.lang
)在特定时刻实例(而不是全局)设置区域设置。如何创建一个等同于moment
(所有42个签名)的函数,该函数始终在与全局不同的特定区域设置中工作?
我在Web项目中有一个必须使用自定义区域设置的子模块。我们不希望在此特定子模块之外使用此区域设置,但我们希望它在子模块中始终使用。所以我基本上想要一个moduleMoment
(或其他),我可以调用moment
,但它在自定义语言环境中工作。有没有内置的方法呢?
注意:我不谈论更改现有实例的区域设置,我正在谈论调用{{1使用语言环境其他而不是其全局语言环境的函数(在所有各种不同的签名中)。所以这不起作用:
moment
...因为args将在全局语言环境中处理,然后事后的实例上的语言环境会发生变化,这已经太晚了。
答案 0 :(得分:1)
我能找到的唯一方法是使用一个临时设置语言环境的函数,调用moment
,然后将语言环境设置回上一个,如下所示:
function moduleMoment() {
var prevLocaleId, m;
prevLocaleId = moment.locale();
try {
moment.locale(customLocaleId);
m = moment.apply(this, arguments);
return m;
} finally {
moment.locale(prevLocaleId);
}
}
或者可以将其添加到moment
,如下所示:
moment.localized = function(locale) {
var prevLocaleId, m, args;
prevLocaleId = moment.locale();
try {
moment.locale(locale);
m = moment.apply(this, Array.prototype.slice.call(arguments, 1));
return m;
} finally {
moment.locale(prevLocaleId);
}
};
答案 1 :(得分:-1)
不幸的是,Moment似乎不支持此功能。 GitHub问题跟踪器中有一项新功能请求:https://github.com/moment/moment/issues/2291
您可以编写一个函数,将其参数转发给 moment
构造函数,然后应用您想要的语言。
以下是一个例子:
function localizedMoment() {
return moment.apply(null, arguments).locale("fr");
}
如果您需要允许参数,请使用Array.prototype.slice
:
function localizedMoment(locale) {
var args = Array.prototype.slice.call(locale, 1);
return moment.apply(null, args).locale(locale);
}