我在我的项目和格式化日期中使用Moment.js如下:
var locale = window.navigator.userLanguage || window.navigator.language;
moment.locale(locale);
someDate.format("L");
它运作良好但有时我需要显示没有年份的日期.我不能使用someDate.format(“MM / DD”)之类的东西,因为在某些语言中它应该是someDate.format(“DD / MM”).我需要像L,LL,LLL这样的东西,但没有年份.
我能做什么?
LTS : 'h:mm:ss A',
LT : 'h:mm A',
L : 'MM/DD/YYYY',
LL : 'MMMM D, YYYY',
LLL : 'MMMM D, YYYY LT',
LLLL : 'dddd, MMMM D, YYYY LT'
解决方法:
好的.这有点可怕,但你知道它会是.
首先,您可以访问(例如)’L’的实际格式字符串:
var formatL = moment.localeData().longDateFormat('L');
接下来,您可以通过明智的正则表达式替换来执行一些手术:
var formatYearlessL = formatL.replace(/Y/g,'').replace(/^\W|\W$|\W\W/,'');
(也就是说:删除YYYY,加上删除后留下的孤立分隔符)
然后,您可以在片刻格式调用中使用新的格式字符串:
someDate.format(formatYearlessL);
这必然会做出一些假设:
>区域设置的月份日数字格式的顺序与该区域设置的年月日格式的顺序相匹配,并删除了年份.
>短格式仅在月和日之间使用分隔符(没有前导/尾随分隔符).
>短数字日期格式的分隔符始终为非字母数字.
>格式由数字元素和分隔符组成,而不是带有文章的句子格式(请参阅RGPT下面关于西班牙语和葡萄牙语的评论,这些评论也适用于其他语言的长格式).
在快速回顾一下locale / * .js时,这些假设适用于我检查过的每个语言环境文件,但可能会有一些违反它们的语言环境. (ETA:下面的评论指出德国短日期格式违反了第二个假设)
作为一个额外的重要警告,这可能是脆弱的.未来版本的moment.js完全有可能改变当前longDateFormat中数据的位置…