使用JavaScript获取不同时区的时间

=======================================================================================

使用JavaScript可以很容易的在页面上显示出本地时间,但如果想在页面上显示出不同时区的时间,是否可以做到呢?答案是肯定的!我们只需要做一些简单的日期计算就可以得到不同时区的时间了,下面就详细讲解一下。

利用Date对象得到本地时间

d = new Date();

localTime = d.getTime(); //通过调用Data()对象的getTime()方法,即可显示1970年1月1日后到此时时间之间的毫秒数。
接下来,通过Data()对象的getTimezoneOffset()方法来找出当地时间偏移值。在缺省情况下,此方法以分钟显示时区偏移值结果,因此在早先的计算中要将此值转换成毫秒。
localOffset = d.getTimezoneOffset() * 60000;
然后将当前时间与时区偏移量相加,得到国际标准时间(用毫秒表示的,因为后面还需要计算,所以这里不做转换),然后与你想要知道的时区的偏移量再进行相加,得到那个时间的时间,然后再利用Date对象将其转换为时间字符串。
utc = localTime + localOffset; //得到国际标准时间
offset = 5.5;
calctime = utc + (3600000*offset);
nd = new Date(calctime);
document.write('指定时区时间是:' + nd.toLocalString());

 

出处:https://blog.csdn.net/chris_mao/article/details/2587897

=======================================================================================

JavaScript取指定时区的时间

    // 北京是getZoneTime(8),纽约是getZoneTime(-5),班加罗尔是getZoneTime(5.5). 偏移值是本时区相对于格林尼治所在时区的时区差值
    function getZoneTime(offset){
        // 取本地时间
        var localtime = new Date();  
        // 取本地毫秒数
        var localmesc = localtime.getTime(); 
        // 取本地时区与格林尼治所在时区的偏差毫秒数
        var localOffset = localtime.getTimezoneOffset() * 60000; 
        // 反推得到格林尼治时间
        var utc = localOffset + localmesc; 
        // 得到指定时区时间
        var calctime = utc + (3600000*offset);  
        var nd = new Date(calctime);  
        return nd.toDateString()+" "+nd.getHours()+":"+nd.getMinutes()+":"+nd.getSeconds(); 
    }

 

 

出处:https://www.cnblogs.com/heyang78/p/4212583.html

=======================================================================================

js 获取指定时区的时间

var timezone = 8; //目标时区时间,东八区   东时区正数 西市区负数
var offset_GMT = new Date().getTimezoneOffset(); // 本地时间和格林威治的时间差,单位为分钟
var nowDate = new Date().getTime(); // 本地时间距 1970 年 1 月 1 日午夜(GMT 时间)之间的毫秒数
var targetDate = new Date(nowDate + offset_GMT * 60 * 1000 + timezone * 60 * 60 * 1000);
console.log("东8区现在是:" + targetDate);

 

出处:

=======================================================================================

javascript时区函数

js的时区函数:

1、获取当前时区和GMT时间(格林威治时间)的差值

var d=new Date();

var localOffset=d.getTimezoneOffset(); //返回值以分钟为单位

 

举例:根据本机时间获得GMT时间和任意时区的时间

var d=new Date(); //创建一个Date对象
var localTime = d.getTime();
var localOffset=d.getTimezoneOffset()*60000; //获得当地时间偏移的毫秒数
var utc = localTime + localOffset; //utc即GMT时间
var offset =10; //以夏威夷时间为例,东10区
var hawaii = utc + (3600000*offset);
var nd = new Date(hawaii);
document.writeln("Hawaii time is " + nd.toLocaleString() + <br>");

 

2、用Date.UTC创建Date对象,输入的是GMT时间

var d=Date.UTC(year, month, day, hours, minutes, seconds, ms);

document.write(d);

以GMT时间构建Date对象,返回Date对象

3、输出GMT时间

var d=new Date();

函数:d.toUTCString() 或 d.toGMTString() 

该俩函数相同。后者被认为是过时的。

相对于toLocaleString输出本地时间,该函数输出GMT时间

对象的其他方法:
d.getUTCDate() 函数 -- 返回date对象中用世界标准时间(UTC)表示的月份中的一天(1-31)
d.getUTCDay() 函数 -- 返回date对象中用世界标准时间(UTC)表示的周中的一天(0-6)
d.getUTCFullYear() 函数 -- 返回date对象中用世界标准时间(UTC)表示的四位年份
d.getUTCHours() 函数 -- 返回date对象中用世界标准时间(UTC)表示的小时数(0-23)
d.getUTCMilliseconds() 函数 -- 返回date对象中用世界标准时间(UTC)表示的毫秒数(0-999)
d.getUTCMinutes() 函数 -- 返回date对象中用世界标准时间(UTC)表示的分钟数(0-59)
d.getUTCMonth() 函数 -- 返回date对象中用世界标准时间(UTC)表示的月份数(0-11)
d.getUTCSeconds() 函数 -- 返回date对象中用世界标准时间(UTC)表示的秒数(0-59)

d.setUTCDate() 函数 -- 设置date对象中用世界标准时间(UTC)表示的月份的一天,并返回date对象距1970年1月1日午夜之间的毫秒数(时间戳)
d.setUTCFullYear() 函数 -- 设置date对象中用世界标准时间(UTC)表示的年份,月份和天,并返回date对象距1970年1月1日午夜之间的毫秒数(时间戳)
d.setUTCHours() 函数 --- 设置date对象中用世界标准时间(UTC)表示的小时,分钟,秒和毫秒,并返回date对象距1970年1月1日午夜之间的毫秒数(时间戳)
d.setUTCMilliseconds() 函数 -- 设置date对象中用世界标准时间(UTC)表示的毫秒数,并返回date对象距1970年1月1日午夜之间的毫秒数(时间戳)
d.setUTCMinutes() 函数 -- 设置date对象中用世界标准时间(UTC)表示的分钟,秒,并返回date对象距1970年1月1日午夜之间的毫秒数(时间戳)
d.setUTCMonth() 函数 -- 设置date对象中用世界标准时间(UTC)表示的月份,天,并返回date对象距1970年1月1日午夜之间的毫秒数(时间戳)
d.setUTCSeconds() 函数 -- 设置date对象中用世界标准时间(UTC)表示的秒,毫秒,并返回date对象距1970年1月1日午夜之间的毫秒数(时间戳)

 

出处:http://bjtime.cn/info/view.asp?id=223

=======================================================================================

JavaScript 将当地时间转换成其它时区

毫无疑问,用JavaScript脚本可以通过直接查看用户的时钟,方便地在网页上显示本地时间。
但是,如果你想显示不同地区的时间—--例如,如果你的本部在别的国家,你想查看“本国”时间而非当地时间,又该怎么办呢?
要做到这一点,必须进行各种时间计算才能将当地时间转换为目的时间。本文将解释如何进行这些计算。
第一步:
事情的第一步是获得当地时间。在JavaScript中,这无疑可以通过初始化一个Data()对象来轻松完成。
// create Date object for current location
d = new Date();
通过调用Data()对象的getTime()方法,即可显示1970年1月1日后到此当时时间之间的毫秒数。
// convert to msec since Jan 1 1970
localTime = d.getTime();
第二步:
下一步,通过Data()对象的getTimezoneOffset()方法来找出当地时间偏移值。在缺省情况下,此方法以分钟显示时区偏移值结果,因此在早先的计算中要将此值转换成毫秒。
// obtain local UTC offset and convert to msec
localOffset = d.getTimezoneOffset() * 60000;
注意,getTimezoneOffset()方法的负返回值表示当地时间在全球标准时间(UTC)之前,而正返回值则表示当地时间在全球标准时间(UTC)之后。
注意:万一你想知道我是如何得到60000这个倍增因数的,记住1000毫秒等于一秒,而一分钟等于60秒。因此 ,将分钟转换成毫秒,要用60乘以1000等于60000。
第三步
将本地时间与本地时区偏移值相加得到当前国际标准时间(UTC)。
// obtain UTC time in msec
utc = localTime + localOffset;
这里,变量utc包含当前国际标准时间(UTC)。但是,此时间以1970年1月1日到现在所含有的毫秒数来表示。暂时让它这样表示,因为还要进行一些计算。
第四步
得到国际标准时间(UTC)后,再获得目标城市的国际标准时间(UTC)小时偏移值,把它转换成毫秒,再加上国际标准时间(UTC)。
// obtain and add destination's UTC time offset
// for example, Bombay
// which is UTC + 5.5 hours
offset = 5.5;
bombay = utc + (3600000*offset);
注意:万一你想知道我是如何得到3600000这个倍增因数的,记住1000毫秒等于一秒,而一小时等于3600秒。因此 ,将小时转换成毫秒,要用3600乘以1000等于3600000。
此时,变量bombay包含印度孟买城的当地时间。此当地时间以1970年1月1日到现在所含有的毫秒数来表示。显然,这不是很合理,因此我们还要进行一些计算。
第五步
通过初始化一个新的Data()对象,并调用此对象的toLocalString()方法,我们将前一步中计算得到的时间值转换成一个大家可以看得懂的日期/时间字符串。
// convert msec value to date string
nd = new Date(bombay);
document.writeln("Bombay time is " + nd.toLocaleString() + "<br>");
这样转换就完成了!
总结
理解上面的步骤后,我们再看一看这段脚本(列表A),它建立一个紧凑,自定义的函数calcTime()来执行所有的计算并返回一个时间值。
列表A
<html>
<head>
<script language="JavaScript">
// function to calculate local time
// in a different city
// given the city's UTC offset
function calcTime(city, offset) {
// create Date object for current location
d = new Date();
// convert to msec
// add local time zone offset
// get UTC time in msec
utc = d.getTime() + (d.getTimezoneOffset() * 60000);
// create new Date object for different city
// using supplied offset
nd = new Date(utc + (3600000*offset));
// return time as a string
return "The local time in " + city + " is " + nd.toLocaleString();
}
// get Bombay time
alert(calcTime('Bombay', '+5.5'));
// get Singapore time
alert(calcTime('Singapore', '+8'));
// get London time
alert(calcTime('London', '+1'));
</script>
</head>
<body>
</body>
</html>
这里,函数calcTime()接受一个城市名和它的国际标准时间(UTC)偏移值(按小时计)。然后内部执行所有上面描述的计算,并返回一个包含此城市当地时间的字符串。
以下是列表A输出内容的一些样本。
孟买当地时间为2005年8月1日,星期一下午4时43分51秒
新加坡当地时间为2005年8月1日,星期一下午7时13分51秒
伦敦当地时间为2005年8月1日,星期一下午12时13分51秒

 

出处:http://www.jb51.net/article/17517.htm

posted on 2015-09-24 19:55  jack_Meng  阅读(6923)  评论(0编辑  收藏  举报

导航