【发布时间】:2016-12-26 00:31:12
【问题描述】:
有没有办法根据语言环境为长日期的时刻添加自定义格式代码?
例如:
moment().format("L")
是一种现有格式,将打印语言环境的长日期(包括年份),但如果我想添加自己的排除年份,如下所示:
moment().format("LTY") 刚刚在给定的语言环境中打印了月份和日期。
我该怎么做?
【问题讨论】:
标签: javascript date format momentjs
有没有办法根据语言环境为长日期的时刻添加自定义格式代码?
例如:
moment().format("L")
是一种现有格式,将打印语言环境的长日期(包括年份),但如果我想添加自己的排除年份,如下所示:
moment().format("LTY") 刚刚在给定的语言环境中打印了月份和日期。
我该怎么做?
【问题讨论】:
标签: javascript date format momentjs
阅读long date formats 部分。您可以使用以下方法替换默认的长日期格式对象:
moment.updateLocale('en', {
longDateFormat : {
LT: "h:mm A",
LTS: "h:mm:ss A",
L: "MM/DD", // Remove year
LL: "MMMM Do YYYY",
LLL: "MMMM Do YYYY LT",
LLLL: "dddd, MMMM Do YYYY LT"
}
});
然后使用:
var x = moment().format('L');
Moment 解析传递给 format 的字符串以查找标记。如果您想添加自定义标记,如“LTY”,您还需要将其添加到本地格式化标记列表中:
var localFormattingTokens = /(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g;
将更改为(添加 LTY):
var localFormattingTokens = /(\[[^\[]*\])|(\\)?(LTY|LTS|LT|LL?L?L?|l{1,4})/g;
并使用新令牌更新默认长日期格式:
var defaultLongDateFormat = {
LTY : 'MM/DD HH:mm', // format for new token
LTS : 'h:mm:ss A',
LT : 'h:mm A',
L : 'MM/DD/YYYY',
LL : 'MMMM D, YYYY',
LLL : 'MMMM D, YYYY h:mm A',
LLLL : 'dddd, MMMM D, YYYY h:mm A'
};
那么,如果你想要其他格式:
moment.updateLocale('en', {
longDateFormat : {
LTY: 'MM/DD HH:mm', // new format for token here
LT: "h:mm A",
LTS: "h:mm:ss A",
L: "MM/DD/YYYY",
LL: "MMMM Do YYYY",
LLL: "MMMM Do YYYY LT",
LLLL: "dddd, MMMM Do YYYY LT"
}
});
最后:
var x = moment().format('LTY');
但是您必须检查这将对其他代码产生什么影响。此外,您每次更新 moment.js 源时都必须应用相同的更改,无法使用 CDN,并且您的代码无法使用标准 moment.js 库移植到其他站点。
所以坚持updateLocale 做事的方式。或者干脆做:
var LTY = 'MM/DD HH:mm';
var d = new moment().format(LTY);
console.log(d)
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.14.1/moment.js"></script>
你就完成了。
请注意,此处使用“语言环境”是用词不当。格式化偏好与用户所在的位置(即他们的语言环境)无关,而“en”是一种在大量语言环境中使用的语言,对于如何格式化日期有非常不同的偏好。
【讨论】: