为什么2位数字不能用于Date.toLocaleTimeString?

时间:2019-05-17 07:16:02

标签: javascript date

我发誓我做对了,如on MDN所述:

(new Date()).toLocaleTimeString(undefined, {
    hour: '2-digit',
    minute: '2-digit',
    second: '2-digit'
})

但这输出"3:13:22 AM"。...小时不是2位数字。我究竟做错了什么?我很累。

3 个答案:

答案 0 :(得分:2)

如果我理解正确,是否要在24小时内输出?

let date = new Date().toLocaleTimeString(undefined, {
    hour12: false
});

console.log(date);

编辑:您的原始问题似乎是先前已涵盖但被归类为错误的问题。 https://bugs.chromium.org/p/chromium/issues/detail?id=507037

答案 1 :(得分:1)

尝试这样。设置hour12 to false。因此,如果少于10,您将获得以0开头的2位数小时。

var a = (new Date()).toLocaleTimeString(undefined, {
    hour12: false,
    hour: '2-digit',
    minute: '2-digit',
    second: '2-digit'
});

console.log(a)

答案 2 :(得分:1)

主要的Chrome,Firefox,Safari和NodeJS似乎忽略了hour:'2-digit'属性。相反,他们应用选项hour12:的值(即12或24小时表示法)代替:

  

hour12:true的结果为“ 3:00:00 PM”,因为在PM存在的情况下,没有人真正写“ 03:00:00 PM”。这样做可能会使其他人误以为这是24小时制(即凌晨3点),如果一个人快速阅读却错过了PM

     

hour12:false的结果为“ 15:00:00”,并且不再需要“ PM”。

因此,在您的示例中,如果要使用24小时制,请使用:

let date = (new Date("17 May 2019 3:13:22 AM")).toLocaleTimeString(undefined, {
    hour12: false,
    hour: '2-digit', 
    minute: '2-digit',
    second: '2-digit'
})

console.log(date); //03:13:22