【问题标题】:custom long date format in moment js时刻js中的自定义长日期格式
【发布时间】:2016-12-26 00:31:12
【问题描述】:

有没有办法根据语言环境为长日期的时刻添加自定义格式代码?

例如:

moment().format("L")

是一种现有格式,将打印语言环境的长日期(包括年份),但如果我想添加自己的排除年份,如下所示:

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

我该怎么做?

【问题讨论】:

    标签: javascript date format momentjs


    【解决方案1】:

    阅读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”是一种在大量语言环境中使用的语言,对于如何格式化日期有非常不同的偏好。

    【讨论】:

    • 你在哪里设置 localFormattingTokens?
    • @Ben——你必须编辑源代码(localFormattingTokens 在 2.14.1 版本的第 559 行)。我已经在上面展示了如何做到这一点,但由于给出的原因不推荐它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-15
    • 1970-01-01
    • 2021-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多