使用toLocaleTimeString()函数将毫秒数转换为可读时间格式

3

我正在尝试使用毫秒显示时间。我使用 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 来获得期望的结果。


1
你应该阅读 MDN 上关于 toLocaleTimeString 的文章。第二个参数应该是一个选项对象,而不是一个数字。 - RobG
2个回答

阿里云服务器只需要99元/年,新老用户同享,点击查看详情
0

.toLocaleTimeString() 方法的正常行为是根据您的环境的 本地 时区显示时间的字符串表示形式,这就是为什么您得到了不同的结果。

而您在以下代码中传递了错误的参数 毫秒

date.toLocaleTimeString('en',milliseconds);

实际上,Date.prototype.toLocaleTimeString() 方法 接受一个 options 对象作为第二个参数,您可以在其中指定多个选项,包括 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


1
我们在哪里找到选项对象的原型定义?我看到有人给出了该对象上属性的示例,但我找不到这些属性是什么,或者兼容值可能是什么。 - PaulG
@PaulG 我刚刚参考了MDN文档,你可以在那里找到一些使用options的示例。 - cнŝdk
谢谢你的回复 :) 我看到那里的例子了,但我认为应该有一些文档完整地描述这个对象,例如显示每个属性的其他可能值。话虽如此,我确实注意到我们可以通过智能感知(至少在VsCode或WebStorm中)获得一些洞见,这让我达到了我需要去的地方。我也通过智能感知注意到了选项对象的类型(Intl.DateTimeFormatOptions)。另外 - 结果证明,这些类型是在2020年5月13日的这个PR中最近添加的:https://github.com/microsoft/TypeScript/pull/38522 - PaulG
1
好的,太棒了,但是我发现 MDN 文档中没有这样的部分。 - cнŝdk

-1
var date = new Date(10000); 中,"10000" 单位始终相对于 UTC 时区的 1970-01-01 00:00:00(即从它加上 10000 毫秒)。因此,相应的时间等同于 1970-01-01 00:00:10 UTC。 date.toLocaleTimeString('en') 输出您系统时区的时间,因此给出了您发现的差异。 修复的一种方法是通过添加以毫秒为单位的时区差异来设置 date 变量,如下所示: var date = new Date(10000 + new Date().getTimezoneOffset()*60000);new Date().getTimezoneOffset() 是以分钟为单位的时区差异)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,