时刻js显示AM / PM后的毫秒数

时间:2017-12-14 13:55:42

标签: javascript momentjs date-formatting

当前正在开发一个处理不同语言的项目,并在以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)); 

1 个答案:

答案 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。

AL是本地化的令牌(输出因地区而异)。

修改

您可以使用localeData()LTS获取本地化格式令牌,然后您可以检查longDateFormat()令牌是否包含AM / PM令牌(LTS或{{ 1}})并以dinamically的方式更改格式。

这是一个实时样本:



A

a




请注意:

  • 此方法不针对momentjs支持的每个语言环境进行测试。 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)。