1

考虑一下我来自印度,我的国家 ISO 代码是IN or IND or 356( http://en.wikipedia.org/wiki/ISO_3166-1 )。我怎么能用它生成一个 JavaScript Date 对象?也就是说,在 IST 中。

在 Python 中,我们有astimezone()。JavaScript 中是否有类似的东西?

PS:允许使用 jQuery 或任何受信任的第三方 API。

4

3 回答 3

2

浏览器中的 JavaScript 不是时区感知语言。它只能使用两个时区:UTC 和本地时区,其中本地时区取决于浏览器的时区或运行浏览器的操作系统。

如果您的浏览器(和您用户的浏览器)设置为 IST,则所有日期都将显示在 IST 中。如果您的浏览器未设置为 IST,那么您有点不走运。

现在,你可以做一些技巧。例如,您可以执行以下操作:

var d = new Date();  // creates a date in user's local timezone

var istD = new Date(d.getTime() + (d.getTimezoneOffset() + 330) * 60000)
// 330 is the IST offset (5h 30m == 330m)

istD现在是一个日期对象,它将“在 IST 中打印日期”。请注意,此日期对象仍处于用户的本地时区,但只要不显示时区部分,它就会出现在 IST 中。

夏令时有一个小问题。由于 IST 没有 DST,所以这个问题被最小化了,但是如果用户的本地时区有 DST 并且您距离 DST 偏移量只有几个小时,这个问题仍然存在。您可能可以使用这些Date.getUTC*函数来规避 DST 问题,但请始终记住,在客户端 JavaScript 中无法正确设置时区。目前没有库可以正确处理所有 TimeZone 规则,包括所有历史日期的夏令时规则。

于 2013-12-19T05:32:11.413 回答
1

您可以设置日期,UTC然后将其转换为LocaleString. 您可以查看Date.prototype.toLocaleString()以获得更多参考。

您还可以看到有关堆栈溢出的问题如何以用户的语言环境格式和时间偏移量显示日期/时间?.

谢谢

于 2013-12-19T05:19:32.437 回答
0

没有直接的 API。但是您可以自己编写代码。


<html>
<body onload="getTimeByTimeZone(5.5)">

<script type="text/javascript">
    function getTimeByTimeZone(offset){
        var d = new Date()
        localTime = d.getTime();
        localOffset=d.getTimezoneOffset()*60000;
        utcTime=localTime + localOffset;//get utc time
        st=utcTime+3600000*offset;//get the specified timezone time
        stime=new Date(st);
        document.write("The specified time is :"+stime.toString());
    }

</script>
</body>
</html>

希望这段代码对你有帮助。

于 2013-12-19T06:14:24.443 回答