Joh*_*amb 1 javascript date-formatting momentjs
目前正在开发一个处理不同语言的项目,并且在以 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”格式的原因。
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)); 
如果您总是想显示结果,例如12/14/2017 3:45:45.199 PM用作格式MM/DD/YYYY h:mm:ss.SSS A令牌而不是L LTS.SSS.
MM代表月份数、 代表DD月份中的日期、YYYY代表年份、代表h小时 (0..12)、mm代表分钟、ss代表秒、SSS代表秒小数和A代表 AM/PM。
L和LTS是本地化标记(输出因区域设置而异)。
编辑:
您可以使用localeData()并longDateFormat()获取本地化格式令牌,然后您可以检查令牌是否LTS包含 AM/PM 令牌(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(尼泊尔语)、hi(印地语)、gom-latn(康卡尼拉丁文脚本) 等语言环境的LTS标记以以下开头A。我不清楚这些语言环境的预期输出是什么。updateLocalelongDateFormat最好的方法可能是定义受支持的语言环境的子集,并为每个语言环境定义自定义格式(和/或只是自定义的时刻LTS)。
| 归档时间: | 
 | 
| 查看次数: | 20834 次 | 
| 最近记录: |