【问题标题】:show time from milliseconds by using toLocaleTimeString()使用 toLocaleTimeString() 以毫秒为单位显示时间
【发布时间】:2018-03-27 16:04:12
【问题描述】:

我正在尝试使用毫秒来显示时间。我正在使用toLocaleTimeString,因为它支持语言环境。

var milliseconds = 10000;
var date = new Date(milliseconds); 

console.log(date.toLocaleTimeString('en',milliseconds));

// expected result - 0:0:10 AM
// actual result   - 5:30:10 AM

结果不是我所期望的。如何使用toLocaleTimeString获得预期结果

【问题讨论】:

  • 你应该阅读 toLocaleTimeString 上的 MDN 文章。第二个参数应该是一个选项对象,而不是一个数字。

标签: javascript string date time locale


【解决方案1】:

.toLocaleTimeString() 方法的正常行为是根据您环境的local 时区以字符串表示形式显示时间,这就是您得到不同结果的原因。 p>

而你传递了一个错误的参数 milliseconds 给它:

date.toLocaleTimeString('en',milliseconds);

实际上Date.prototype.toLocaleTimeString() methodoptions 对象作为第二个参数,您可以在其中指定多个选项,包括指定输出所需时区的timeZone

所以用{"timeZone": "UTC"} 调用它以在UTC 中显示它,像这样:

date.toLocaleTimeString('en',{"timeZone": "UTC"})

演示:

var milliseconds = 10000;
var date = new Date(milliseconds); 

console.log(date.toLocaleTimeString('en',{"timeZone": "UTC"}));

// expected result - 0:0:10 AM
// actual result   - 5:30:10 AM

【讨论】:

  • 我们在哪里可以找到选项对象的原型定义?我看到人们给出了该对象的属性示例,但我找不到这些属性是什么,或者兼容的值是什么。
  • @PaulG 我刚才提到了MDN docs,你可以找到一些使用options 的例子。
  • 感谢您的回复 :) 我在那里看到了示例,但我认为应该有一些文档 somwehere 完全描述了该对象,例如显示每个属性的其他可能值。话虽如此,我确实注意到我们可以通过智能感知(至少是 VsCode 或 webstorm)获得一些洞察力,这样我就可以到达我需要去的地方。我还通过智能感知注意到选项对象的类型(Intl.DateTimeFormatOptions)。此外 - 事实证明,这些类型是最近在 2020 年 5 月 13 日在此 PR 中添加的:github.com/microsoft/TypeScript/pull/38522
  • 啊,好吧,太好了,但我不知道 MDN 文档没有这样的部分。
【解决方案2】:

var date = new Date(10000); 是 UTC,即 1970-01-01 00:00:10 UTC

date.toLocaleTimeString('en') 输出您的系统时区的时间,从而给出您发现的差异。

一种解决方法是通过添加以毫秒为单位的时区差异,将date 变量设置为系统时区,如下所示:

var date = new Date(10000 + new Date().getTimezoneOffset()*60000);new Date().getTimezoneOffset() 是以分钟为单位的时区差异)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    • 2011-04-30
    • 1970-01-01
    • 2021-11-20
    相关资源
    最近更新 更多