我在javascript中转换时间戳时遇到问题。
我有这个时间戳:
2011-10-26T12:00:00-04:00
我一直在尝试将其格式化为可读。到目前为止,它使用我的系统的本地时间而不是时间戳中的GMT偏移来转换它。我知道创建它的时区是EST。我在PST,所以时间被抵消了3个小时。
而不是显示为:
Wednesday October 26, 2011 12:00 pm
显示为:
Wednesday October 26, 2011 9:00 am
我尝试了一些不同的解决方案,但最新的解决方案可以在这里找到:http://blog.stevenlevithan.com/archives/date-time-format
我不太关心格式化部分,因为我正在弄清楚如何处理GMT偏移。非常感谢任何人提供的任何帮助和见解。
答案 0 :(得分:3)
在本地区域中创建日期对象。如果日期字符串是在不同的时区创建的,那么您需要调整日期对象以允许差异。
PST和EST的缩写在网络上不明确,时区缩写没有标准,有些代表两个或多个区域。您应该仅以+/- UTC或GMT(相同或更多或更少)来表达您的区域。
您可以使用 Date.prototype.getTimezoneOffset 获取本地时区偏移量,该值返回必须添加到本地时间以获取UTC的偏移量(以分钟为单位)。计算创建时间字符串的位置的偏移量并将其应用于创建的日期对象(只需在适当的时间内以分钟为单位添加或减去差异)。
如果您的时区为-3小时, getTimezoneOffset 将为该区域中创建的日期对象返回+180。如果字符串来自-4hrs区域,则其偏移量为+240。所以你可以这样做:
var localDate = new Date('2011-10-26T12:00:00') // date from string;
var originOffset = 240;
var localOffset = localDate.getTimezoneOffset();
localDate.setMinutes( localDate.getMinutes() + originOffset - localOffset );
添加原始偏移将其设置为UTC,减去本地偏移将其设置为本地时间。
如果服务器发送的时间字符串是UTC格式会更容易,那么只需应用本地偏移量。
IE不会解析带偏移的时间字符串,Chrome认为上面的时间字符串是UTC并调整为本地偏移量。所以不要让Date解析字符串,手动完成。
答案 1 :(得分:0)
你所在的时区并不重要 - 时间戳会为每个不同的时区带来不同的本地时间,但它们都是正确的,任何检查日期的UTC时间的人都会得到相同的时间戳:
new Date('2011-10-26T12:00:00-04:00').toUTCString()
returns
2011年10月26日星期三16:00:00 GMT
和getTime()随处返回相同的毫秒通用时间戳:1319644800000