2017-10-13 83 views
0

有一个代表语言的字符串(可选地带有国家信息),我怎么知道时间应该显示为12H还是24H?如何从Angular Locale获取有关时间格式的信息(12/24)?

例如

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)); 
    } 

回答

0

可以使用JavaScript的vanila实现它。这里是例子。

var date = new Date();

在此背景hour12:真来12小时格式

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

enter image description here

+0

你的榜样作品被countryInfo一些预定义的硬编码的变量比较。我想要的是接收语言的函数,如果12H是预期格式,则返回true,如果是24H,则返回false。 就像我说的,没有兴趣用它来格式化时间字符串。 – marsop

1

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

注意hour12选项。

hour12:是否使用12小时的时间(而不是24小时的时间)。可能的值是true和false; 默认值是语言环境依赖

根据你想要达到的目标,我还建议检查一下“有力支持国际化”的moment.js。

也许:

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

我还没有测试过这个,但我想知道是否通过** not **指定hour12选项,它会根据区域设置计算出格式。 – Billy

+0

所以解决方案将生成一个空白时间,指定一个区域设置,但不是hour12选项,然后解析它来猜测哪个有Date.prototype使用? - 听起来相当......但我想它会工作 – marsop

+0

https://stackoverflow.com/questions/27647918/detect-with-javascript-if-users-machine-is-using-12-hour-clock-am-pm - 或 - 24 - cl – Billy