Moment.js以本地格式显示小时

时间:2017-08-09 03:00:23

标签: javascript momentjs

我想这是一个非常简单的问题,但我目前无法在moment's documentation找到它。我必须以本地格式显示一小时,例如

  • for locale en-gb:14
  • for locale en-us:2 PM

我找到的最接近的格式是LT,但它也会显示不需要的分钟数...

以下是我的尝试:

moment().format('LT'); // 14:00 / 2:00 PM
// I need some kind of combination of these two:
moment().format('H'); // 14
moment().format('h A'); // 2 PM

是否有实现目标的方法,或者我被迫使用下面的解决方法?

moment().format('LT').replace(/:[0-9]{2}/, '');

4 个答案:

答案 0 :(得分:3)

在momentjs 2.18.1中没有内置方法来获取您正在寻找的本地化输入。包含时间的localized formats个可用内容为:

Time                                               | LT    | 8:30 PM
Time with seconds                                  | LTS   | 8:30:25 PM
Month name, day of month, day of week, year, time  | LLLL  | Thursday, September 4 1986 8:30 PM
                                                   | llll  | Thu, Sep 4 1986 8:30 PM

所以你可能不得不像你在问题中所展示的那样使用解决方法。以下脚本创建并显示一个Map,其中包含每个LT字符串的出现次数。它使用localeDatalongDateFormat来获取LT的本地化格式。



let formatMap = new Map();

['af' , 'ar-dz', 'ar-kw', 'ar-ly', 'ar-ma', 'ar-sa', 'ar-tn', 'ar', 'az', 'be', 'bg', 'bn', 'bo', 'br', 'bs', 'ca', 'cs', 'cv', 'cy', 'da', 'de-at', 'de-ch', 'de', 'dv', 'el', 'en-au', 'en-ca', 'en-gb', 'en-ie', 'en-nz', 'eo', 'es-do', 'es', 'et', 'eu', 'fa', 'fi', 'fo', 'fr-ca', 'fr-ch', 'fr', 'fy', 'gd', 'gl', 'gom-latn', 'he', 'hi', 'hr', 'hu', 'hy-am', 'id', 'is', 'it', 'ja', 'jv', 'ka', 'kk', 'km', 'kn', 'ko', 'ky', 'lb', 'lo', 'lt', 'lv', 'me', 'mi', 'mk', 'ml', 'mr', 'ms-my', 'ms', 'my', 'nb', 'ne', 'nl-be', 'nl', 'nn', 'pa-in', 'pl', 'pt-br', 'pt', 'ro', 'ru', 'sd', 'se', 'si', 'sk', 'sl', 'sq', 'sr-cyrl', 'sr', 'ss', 'sv', 'sw', 'ta', 'te', 'tet', 'th', 'tl-ph', 'tlh', 'tr', 'tzl', 'tzm-latn', 'tzm', 'uk', 'ur', 'uz-latn', 'uz', 'vi', 'x-pseudo', 'yo', 'zh-cn', 'zh-hk', 'zh-tw'].forEach(localeName => {
  var format =  moment.localeData(localeName).longDateFormat('LT');
  
  if( formatMap.has(format) ){
    let val = formatMap.get(format);
    formatMap.set(format, val+1);
  } else {
    formatMap.set(format, 1);
  }
  
});

console.log(formatMap);

<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment-with-locales.min.js"></script>
&#13;
&#13;
&#13;

请注意,布列塔尼(br)区域设置使用h[e]mm A格式,共有7个区域设置(包括:德语(瑞士)de-ch,芬兰语fi,印度尼西亚语{{1使用id

的等等

您的解决方法不包括这些情况,也许您可​​以使用以下内容:

HH.mm

moment().format('LT').replace(/(:|\.)[0-9]{2}/, '');

获取这些语言环境的所需输出。

答案 1 :(得分:2)

您可以使用moment.locale API创建自定义格式 http://momentjs.com/docs/#/customization/long-date-formats/

答案 2 :(得分:1)

只需尝试moment().format('hh');以小数字返回小时数,例如09,10.如果您想要使用moment().format('h');一位数,则只打印2,3,...当您想要打印小时数时meridiem使用moment().format('hh a');moment().format('h a');这些都以小写字母打印meridiem。您可以使用moment().format('hh A');moment().format('h a');以大写字母表示meridiem。这样您就可以在本地打印小时希望这对你有帮助。

答案 3 :(得分:0)

您尝试实现的目标可以通过提示Rahmat Aligos的moment.js本地API来完成。

在这里查看他们的网站功能是需要的代码片段。

$(document).on('click', '[data-locale]', function() {
  var dom = $(this);
  currentLang = dom.data('locale');
  $('[data-locale]').removeClass('active');
  dom.addClass('active');
  updateSnippets();
});

function updateSnippets() {
  var i;

  moment.locale(currentLang); // si or en-gb or tzm-latn etc..

  for (i = 0; i < snippets.length; i++) {
    snippets[i].update();
  }
}

请注意,他们在moment.locale(currentLang)部分中设置了所选国家/地区。 例如:如果您选择阿拉伯语(科威特),则输出将为:

moment()。format('MMMM Do YYYY,h:mm:ss a'); //غشت9 2017年9月31日上午

如果要检测浏览器语言以设置本地的moment.js,请使用以下代码:

var language = window.navigator.userLanguage || window.navigator.language;

console.log(language); //works IE/SAFARI/CHROME/FF