时刻js中的自定义长日期格式

Ben*_*Ben 2 javascript format date momentjs

有没有一种方法可以根据区域设置将自定义格式代码添加到很长的时间?

例如:

moment().format("L")

是一种现有格式,将打印区域设置的长日期(包括年份),但是如果我要添加自己的排除日期的日期,例如:

moment().format("LTY") 只是在给定的语言环境中打印了月份和日期。

我怎样才能做到这一点?

Rob*_*obG 5

阅读有关长日期格式的部分。您可以使用以下方法替换默认的长日期格式对象:

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"
                }
});
Run Code Online (Sandbox Code Playgroud)

然后使用:

var x = moment().format('L');
Run Code Online (Sandbox Code Playgroud)

Moment解析传递给格式化的字符串以查找令牌。如果要添加自定义标记(例如“ LTY”),则还需要将其添加到本地格式标记列表中:

var localFormattingTokens = /(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g;
Run Code Online (Sandbox Code Playgroud)

将更改为(添加了LTY):

var localFormattingTokens = /(\[[^\[]*\])|(\\)?(LTY|LTS|LT|LL?L?L?|l{1,4})/g;
Run Code Online (Sandbox Code Playgroud)

并使用新令牌更新默认的长日期格式:

    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'
};
Run Code Online (Sandbox Code Playgroud)

然后,如果您想要其他格式:

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"
                }
});
Run Code Online (Sandbox Code Playgroud)

最后:

var x = moment().format('LTY');
Run Code Online (Sandbox Code Playgroud)

但您必须检查对其他代码的处理方式。同样,每次更新moment.js源代码时,您都必须应用相同的更改,不能使用CDN,并且使用标准moment.js库,您的代码无法移植到其他站点。

因此,请坚持使用updateLocale的处理方式。或者只是做:

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"
                }
});
Run Code Online (Sandbox Code Playgroud)
var x = moment().format('L');
Run Code Online (Sandbox Code Playgroud)

到此为止。

请注意,此处使用的“语言环境”是用词不当。格式设置首选项与用户所处的位置(即他们的语言环境)无关,“ en”是一种在众多语言环境中使用的语言,这些语言环境对如何设置日期格式具有不同的首选项。