如何从Angular Locale获取有关时间格式(12/24)的信息?

时间:2017-10-13 10:52:25

标签: javascript angular internationalization

有一个代表语言的字符串(可选择带国家信息),如何知道时间是显示为12H还是24H?

例如

is12HFormat('en_EN') // returns true
is12HFormat('es_ES') // returns false

请注意,我不想使用管道以特定格式显示时间,只是找出是否应该使用其中一个。

修改

目前正在使用:

 private guessIf12HTimeFormat(language: string): boolean {
    const date = new Date(Date.UTC(2012, 11, 12, 3, 0, 0));
    const dateString = date.toLocaleTimeString(language);
    return (!!dateString.match(/am|pm/i) || !!date.toString().match(/am|pm/i));
  }

3 个答案:

答案 0 :(得分:1)

请参阅 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toLocaleTimeString

请注意hour12选项。

小时12:是否使用12小时时间(而不是24小时时间)。可能的值为true和false; 默认值取决于区域设置

根据您要实现的目标,我还建议您查看具有“强大支持国际化”的moment.js。

也许:

var format = new Intl.DateTimeFormat('es-ES');
var usedOptions = format.resolvedOptions();
var use24 = !usedOptions.hour12;

答案 1 :(得分:0)

您可以使用vanila JavaScript实现它。这是一个例子。

var date = new Date();

此处设置hour12:true为12小时格式

date.toLocaleString('en-US', {hour12: true})

enter image description here

答案 2 :(得分:0)

对于那些迷迷糊糊的人,您可以通过DateTimeFormat.resolvedOptions对某种格式默认使用的选项进行一些内省,但是您需要确保指定hour作为格式的一部分,否则可能会至少在某些环境中被排除在外

const options = new Intl.DateTimeFormat('en-US', {
  hour: 'numeric',
}).resolvedOptions();

alert(options.hour12)

在这里使用任何您想要的本地人。