1

我一直在挖掘尽可能多的东西,但我似乎无法找到我正在寻找的东西,所以我得出的结论是我要么不知道我在寻找什么,要么这是不可能的。无论哪种方式..

我想要实现的是一个时间戳示例:1373439600000给定的偏移量为 -12 到 12(就范围而言,这是正确的吗?),然后我可以将上面的时间戳相应地减去,并传递新的给函数添加时间戳,Date()这样我就可以对其进行操作以供人类阅读。

偏移量是两部分,它是用户在一个实例中指定的,而在另一个实例中,getTimezoneOffset()如果未指定,它将默认为本地。因此,试图弄清楚如何利用该范围并与之合作。做相应的一切。

想法?我是否以正确的方式接近这个?

我正在使用的时间戳已经是 UTC,不确定这会有所不同。

4

2 回答 2

3

JavaScriptDate类型有很多问题,但它的主要怪癖之一是它只能理解两个时区 - UTC 或 Local。它在内部和某些属性和函数(如 )中使用 UTC .toUTCString(),但除此之外它使用本地时区。

许多浏览器在从字符串解析 a 时会接受Date偏移量,但这仅用于设置 UTC 时间。任何出路的东西都将再次转换回当地时区。

幸运的是,有一些很棒的库可以解决这些问题。 Moment.js非常适合这个。这是您可能正在寻找的示例:

moment(1373439600000).zone(8).format("YYYY-MM-DD HH:mm:ss Z")

//  output: "2013-07-09 23:00:00 -08:00"

当然,您可以根据需要进行格式化,或者传入更复杂的区域偏移量,例如"+05:30". 如果您需要使用实际的 IANA 时区,可以使用moment-timezone配套项目,您可以执行以下操作:

moment(1373439600000).tz('America/New_York').format("YYYY-MM-DD HH:mm:ss Z")

//  output: "2013-07-10 03:00:00 -04:00"
于 2013-07-30T21:44:03.950 回答
0

不幸的是,该Date对象没有提供使用时区的工具。如果你有偏移量,你应该能够以毫秒为单位计算偏移量。然后您可以将该值添加(减去?)到您的时间戳并使用它来构造适当的Date.

这有帮助吗?

于 2013-07-30T19:53:45.190 回答