如何为Moment.js语言环境添加新的格式选项?

问题描述:

我希望能够将日期格式化为日期和缩短的月份。 (例如:9月20日en-gb,9月20日en)。然而,Moment.js最接近我们的格式'll',即2017年9月20日的本地化格式。我希望能够创建一个排除'll'年的新格式。我怎样才能最好地实现这一点?如何为Moment.js语言环境添加新的格式选项?

最终的结果我想(假设今天是9月20日):

moment.locale('en'); 
moment().format('my-new-format') ---> Sep 20 
moment.locale('en-gb'); 
moment().format('my-new-format') ---> 20 Sep 
moment().format('ll')    ---> 20 Sep, 2017 
+1

希望这有助于(类似的问题) - https://*.com/questions/39028993/custom-long-date-format-in-moment-js –

+0

这绝对是一个类似的问题!但是,答案不是太有用(除了提供更多的证据,也许我不想解决这个问题是不可能的)。我不想直接编辑库文件或区域设置文件。 – breakfast

可以覆盖使用内置的updateLocale

moment.updateLocale('en', { 
    longDateFormat : { 
     LT: "h:mm A", 
     LTS: "h:mm:ss A", 
     L: "MM/DD/YYYY", 
     l: "M/D/YYYY", 
     LL: "MMMM Do YYYY", 
     ll: "MMM D YYYY", 
     LLL: "MMMM Do YYYY LT", 
     lll: "MMM D YYYY LT", 
     LLLL: "dddd, MMMM Do YYYY LT", 
     llll: "ddd, MMM D YYYY LT" 
    } 
}); 

如果你不希望覆盖本地化已经存在的语言环境,但仍然使用它,我会去这样的字典,因为我不知道添加新格式。

const formats = { 
    en: "MMM D", 
    sv: "DD MMM" 
} 
const customFormat() => formats[moment.locale()]; 
moment.locale("en"); 
console.log(moment().format(customFormat())); // Jan 1 
moment.locale("sv"); 
console.log(moment().format(customFormat())); // 01 Jan 
+2

请提供更多的答案,然后只是一个链接,这是因为如果链接失败,这不再是一个有用的答案 –

+0

LPL,我假设你指向updateLocale(),但我不认为这会为我想要的工作(纠正我,如果我错了)。我不想改变'll',我想保持'll',但添加一个全新的格式。看起来,updateLocale()只允许您更改现有格式,但不允许添加新格式。 – breakfast

+0

是的,我明白了,我认为不幸的是,有任何内容可以建立。在这种情况下,我会用自定义格式的字典来处理它,例如'let custom = {en:“MM D”,sv:“D MM”},然后使用'moment.locale()'中的构建和通过'moment.format(自定义[moment.locale()])解决它' – LPL