考虑一下我来自印度,我所在国家的ISO代码是IN or IND or 356
(http://en.wikipedia.org/wiki/ISO_3166-1)。我如何用它生成JavaScriptDate对象?也就是说,在IST中。
在Python中,我们有astimezone()。JavaScript中有类似的功能吗?
PS:jQuery或任何受信任的第三方API都是允许的。
浏览器中的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没有夏令时,所以这个问题被最小化了,但如果用户的本地时区有夏令时,并且您距离夏令时偏移只有几个小时的时间,这个问题仍然存在。您可能可以使用Date.getUTC*
函数来规避DST问题,但请始终记住,在客户端JavaScript中没有正确执行时区的方法。目前还没有一个库能够正确处理所有时区规则,包括所有历史日期的夏令时规则。
您可以用UTC
设置日期,然后将其转换为LocaleString
。您可以查看Date.protype.toLocaleString()以获得更多参考。
您还可以看到堆栈溢出中提出的问题。如何以用户的区域设置格式和时间偏移量显示日期/时间?。
感谢
没有直接的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>
希望这个代码对你有帮助。