使用Date()转换时区的指定偏移量的时间戳;

时间:2013-07-30 19:24:39

标签: javascript date timestamp timezone-offset

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

我想要实现的是采用时间戳示例:1373439600000和给定的偏移量-12到12(这是正确的,就范围而言?)所以我可以把时间戳放在上面减去相应地,并将新的时间戳传递给Date()函数,以便我可以将其操作为人类可读的显示。

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

想法?我甚至在一个正确的庄园里接近这个吗?

我正在使用的时间戳已经是UTC,不确定这会产生什么影响。

2 个答案:

答案 0 :(得分:3)

JavaScript Date类型有许多问题,但其主要问题之一是它只能理解两个时区 - UTC或Local。它在内部使用UTC,在某些属性和函数中使用.toUTCString(),但它使用本地时区。

许多浏览器在从字符串解析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"

答案 1 :(得分:0)

不幸的是Date对象没有提供用于处理时区的设​​施。如果你有偏移量,你应该能够以毫秒为单位计算偏移量。然后,您可以将该值添加(减去?)到您的时间戳,并使用它来构建相应的Date

这有帮助吗?