ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

javascript – Moment.js的区域设置和特定日期格式

2019-09-27 00:46:49  阅读:227  来源: 互联网

标签:javascript momentjs locale localization


我在我的项目和格式化日期中使用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中数据的位置…

标签:javascript,momentjs,locale,localization
来源: https://codeday.me/bug/20190927/1822313.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有