当前正在开发一个处理不同语言的项目,并在以PM / AM格式显示毫秒时遇到奇怪的行为。
如果我想使用AM / PM格式显示具有毫秒精度的日期/时间对,我会得到这样的结果:
12/14/2017 3:45:45 PM.199
24小时格式的相同日期/时间如下所示:
12/14/2017 15:45:45.199
有没有办法像这样显示AM / PM格式:
12/14/2017 3:45:45.199 PM
目标是根据用户本地化选项取消日期/时间,这就是我使用“L LTS”格式的原因。
Here is a fiddle to illustrate the problem
var divEn = $('#divEn');
var divFi = $('#divFi');
var en = "en";
var pt = "pt";
var dateEn = moment().locale(en);
var dateFi = moment().locale(pt);
format = "L LTS.SSS";
divEn.text(dateEn.format(format));
divFi.text(dateFi.format(format));
答案 0 :(得分:0)
如果您始终希望将结果显示为12/14/2017 3:45:45.199 PM
,请使用MM/DD/YYYY h:mm:ss.SSS A
作为format令牌,而不是L LTS.SSS
。
MM
代表月份,DD
是一月中的某一天,YYYY
是年份,h
是小时(0..12),{ {1}}代表分钟,mm
代表秒,ss
代表小数秒,SSS
代表AM / PM。
A
和L
是本地化的令牌(输出因地区而异)。
修改强>
您可以使用localeData()
和LTS
获取本地化格式令牌,然后您可以检查longDateFormat()
令牌是否包含AM / PM令牌(LTS
或{{ 1}})并以dinamically的方式更改格式。
这是一个实时样本:
A

a

请注意:
function getCustomLocalizedFormat(locale){
var localeData = moment.localeData(locale);
var lts = localeData.longDateFormat('LTS');
var format = "L LTS.SSS";
if( lts.match(/a/i) ){
format = "L h:mm:ss.SSS A";
}
return format;
}
var divEn = $('#divEn');
var divFi = $('#divFi');
var divRes = $('#divRes');
var en = "en";
var pt = "pt";
var dateEn = moment().locale(en);
var dateFi = moment().locale(pt);
var enLocaleData = moment.localeData('en');
var formatEn = getCustomLocalizedFormat('en');
var formatPt = getCustomLocalizedFormat('pt');
divEn.text(dateEn.format(formatEn));
divFi.text(dateFi.format(formatPt));
divRes.text(moment().format('MM/DD/YYYY h:mm:ss.SSS A'));
(旁遮普语),<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.19.4/moment-with-locales.min.js"></script>
<p>English</p>
<div id="divEn"></div>
<p>Portuguese</p>
<div id="divFi"></div>
<p>General</p>
<div id="divRes"></div>
(马拉雅拉姆语),pa-in
(尼泊尔语),ml
(印地语),ne
(Konkani拉丁文)和其他语言环境拥有以hi
开头的gom-latn
令牌。我不清楚这些区域设置的预期输出是什么。LTS
功能和A
键自定义Long Date Formats。最好的方法可能是定义受支持的语言环境的子集,并为每个语言环境定义自定义格式(和/或只是自定义时刻updateLocale
)。