如何构建'瞬间'在非全局区域设置中工作的函数
How can I build a 'moment' function that works in a non-global locale?
使用MomentJS,如果需要,我可以使用.locale
(或旧版本中的.lang
)在特定时刻实例(而不是全局)上设置区域设置。如何创建一个等效于moment
(它的所有42个签名)的函数,该函数始终在不同于全局的特定区域设置中工作?
我在一个web项目中有一个子模块,它必须使用自定义区域设置。我们不希望这个区域设置在这个特定的子模块之外使用,但我们希望它在该子模块内始终使用。所以我基本上想要一个moduleMoment
(或其他什么),我可以像moment
一样调用它,但它可以在自定义区域设置中工作。有什么内置的方法可以做到这一点吗?
注意:我不是在谈论更改现有实例的区域设置,而是在谈论使用与其全局区域设置不同的区域设置来调用moment
函数(具有各种不同的签名)。所以这不会起作用:
var m = moment(args).locale(localeId);
因为args将在全局区域设置中进行处理,然后实例的区域设置在事后发生更改,这已经太晚了。
我能找到的唯一方法是使用一个函数来临时设置语言环境,调用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);
}
};
您可以编写一个函数,将其参数转发给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);
}
相关文章:
- onkeyup无法动态创建多个文本区域
- 全局变量和全局对象的属性之间有什么区别吗
- 正在全局范围中查找JavaScript函数
- FabricJs-限制主对象内添加对象的移动区域
- delete关键字在全局变量上的不同行为
- 在javascript函数中设置全局变量
- 如何将getJson的响应保存在全局变量中
- 全局对象是属于哪个类的对象
- Javascript全局onclick监听器
- 从Javascript方法返回全局变量
- 访问jsrender模板中的全局javascript变量并更新它
- 具有所有样式的文本正在复制到可编辑文本区域
- 如何为高图中的区域线创建z索引
- 在文本区域POST后解码JSON
- 在文本区域中使用jQuery.text()保持换行符
- javascript无法重新定义函数内部的全局对象
- javascript 中的全局函数
- ng在下拉列表和文本区域提交
- 如何构建'瞬间'在非全局区域设置中工作的函数
- 如何使用javascript正则表达式全局查找和替换文本区域字符串的开头