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


Posted in Javascript onMarch 19, 2009

但是,如果你想显示不同地区的时间—--例如,如果你的本部在别的国家,你想查看“本国”时间而非当地时间,又该怎么办呢?
要做到这一点,必须进行各种时间计算才能将当地时间转换为目的时间。本文将解释如何进行这些计算。
第一步:
事情的第一步是获得当地时间。在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秒

Javascript 相关文章推荐
FireFox中textNode分片的问题
Apr 10 Javascript
WordPress 插件——CoolCode使用方法与下载
Jul 02 Javascript
细品javascript 寻址,闭包,对象模型和相关问题
Apr 27 Javascript
JavaScript中的Math.LN2属性用法详解
Jun 12 Javascript
详解Javascript继承的实现
Mar 25 Javascript
JS操作xml对象转换为Json对象示例
Mar 25 Javascript
关于vuex的学习实践笔记
Apr 05 Javascript
Node.js成为Web应用开发最佳选择的原因
Feb 05 Javascript
详解vue2.0 资源文件assets和static的区别
Nov 27 Javascript
Vue CLI3移动端适配(px2rem或postcss-plugin-px2rem)
Apr 27 Javascript
查找Vue中下标的操作(some和findindex)
Aug 12 Javascript
详解阿里Node.js技术文档之process模块学习指南
Jan 04 Javascript
javascript attachEvent和addEventListener使用方法
Mar 19 #Javascript
for 循环性能比较 提高for循环的效率
Mar 19 #Javascript
js no-repeat写法 背景不重复
Mar 18 #Javascript
javascript 避免闭包引发的问题
Mar 17 #Javascript
用JavaScript编写COM组件的步骤
Mar 17 #Javascript
IE6与IE7中,innerHTML获取param的区别
Mar 15 #Javascript
InnerHtml和InnerText的区别分析
Mar 13 #Javascript
You might like
站长助手-网站web在线管理程序 v1.0 下载
2007/05/12 PHP
php上传文件中文文件名乱码的解决方法
2013/11/01 PHP
php接口和抽象类使用示例详解
2014/03/02 PHP
PHP采用get获取url汉字出现乱码的解决方法
2014/11/13 PHP
php实现有趣的人品测试程序实例
2015/06/08 PHP
PHP 表单提交及处理表单数据详解及实例
2016/12/27 PHP
基于CI(CodeIgniter)框架实现购物车功能的方法
2018/04/09 PHP
nodejs 后缀名判断限制代码
2011/03/31 NodeJs
jQuery遮罩层实现方法实例详解(附遮罩层插件)
2015/12/08 Javascript
jQuery+css实现的时钟效果(兼容各浏览器)
2016/01/27 Javascript
JavaScript中cookie工具函数封装的示例代码
2016/10/11 Javascript
微信小程序中子页面向父页面传值实例详解
2017/03/20 Javascript
node.js 核心http模块,起一个服务器,返回一个页面的实例
2017/09/11 Javascript
Vue仿今日头条实例详解
2018/02/06 Javascript
详解简单易懂的 ES6 Iterators 指南和示例
2019/09/24 Javascript
JS操作json对象key、value的常用方法分析
2019/10/29 Javascript
使用原生javascript开发计算器实例代码
2021/02/21 Javascript
[01:18:43]2014 DOTA2华西杯精英邀请赛5 24 iG VS DK
2014/05/25 DOTA
[05:48]DOTA2英雄梦之声vol21 屠夫
2014/06/20 DOTA
[03:12]完美世界DOTA2联赛PWL DAY7集锦
2020/11/06 DOTA
python字符串连接的N种方式总结
2014/09/17 Python
Python 常用string函数详解
2016/05/30 Python
Python 反转字符串(reverse)的方法小结
2018/02/20 Python
python3获取两个日期之间所有日期,以及比较大小的实例
2018/04/08 Python
Python实现的质因式分解算法示例
2018/05/03 Python
Python线程下使用锁的技巧分享
2018/09/13 Python
python3实现mysql导出excel的方法
2019/07/31 Python
django中使用事务及接入支付宝支付功能
2019/09/15 Python
将tensorflow.Variable中的某些元素取出组成一个新的矩阵示例
2020/01/04 Python
Python logging模块写入中文出现乱码
2020/05/21 Python
Python3.7安装pyaudio教程解析
2020/07/24 Python
任意一块网页内容实现“活”的背景(目前火狐浏览器专有)
2014/05/07 HTML / CSS
新浪网技术部笔试题
2016/08/26 面试题
港湾网络笔试题
2014/04/19 面试题
运动会横幅标语
2014/06/17 职场文书
Python 避免字典和元组的多重嵌套问题
2022/07/15 Python