如何创建给定国家ISO代码的Javascript Date()对象?

时间:2013-12-19 05:11:43

标签: javascript date timezone country-codes

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

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

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

3 个答案:

答案 0 :(得分: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规则,包括所有历史日期的夏令时规则。

答案 1 :(得分:1)

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

您还可以在堆栈溢出How do I display a date/time in the user's locale format and time offset?上看到问题。

由于

答案 2 :(得分: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>

希望此代码对您有所帮助。