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 相关文章推荐
页面载入结束自动调用js函数示例
Sep 23 Javascript
javascript实现的DES加密示例
Oct 30 Javascript
node.js中的events.EventEmitter.listenerCount方法使用说明
Dec 08 Javascript
在浏览器中打开或关闭JavaScript的方法
Jun 03 Javascript
浅谈JavaScript中的作用域和闭包问题
Jul 07 Javascript
node.js请求HTTPS报错:UNABLE_TO_VERIFY_LEAF_SIGNATURE\的解决方法
Dec 18 Javascript
js实现以最简单的方式将数组元素添加到对象中的方法
Dec 20 Javascript
Node.JS段点续传:Nginx配置文件分段下载功能的实现方法
Mar 12 Javascript
初学node.js中实现删除用户路由
May 27 Javascript
一个手写的vue放大镜效果
Aug 09 Javascript
基于js实现复制内容到操作系统粘贴板过程解析
Oct 11 Javascript
有关vue 开发钉钉 H5 微应用 dd.ready() 不执行问题及快速解决方案
May 09 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
将博客园(cnblogs.com)数据导入到wordpress的代码
2013/01/06 PHP
php上传apk后自动提取apk包信息的使用(示例下载)
2013/04/26 PHP
PHP eval函数使用介绍
2013/12/08 PHP
PHP中的switch语句的用法实例详解
2015/10/21 PHP
谈谈php对接芝麻信用踩的坑
2016/12/01 PHP
PHP的PDO事务与自动提交
2019/01/24 PHP
Jquery 高亮显示文本中重要的关键字
2009/12/24 Javascript
javascript 定义新对象方法
2010/02/20 Javascript
javascript删除数组元素并且数组长度减小的简单实例
2014/02/14 Javascript
PHP 数组current和next用法分享
2015/03/05 Javascript
jQuery插件实现大图全屏图片相册
2015/03/14 Javascript
JS动态修改图片的URL(src)的方法
2015/04/01 Javascript
js使用DOM操作实现简单留言板的方法
2015/04/10 Javascript
详解AngularJS实现表单验证
2015/12/10 Javascript
javascript函数自动执行常用方法汇总
2016/03/28 Javascript
基于jQuery实现火焰灯效果导航菜单
2017/01/04 Javascript
JavaScript方法_动力节点Java学院整理
2017/06/28 Javascript
微信小程序实现image组件图片自适应宽度比例显示的方法
2018/01/16 Javascript
JavaScript事件对象深入详解
2018/12/30 Javascript
基于node.js实现爬虫的讲解
2019/02/18 Javascript
atom-design(Vue.js移动端组件库)手势组件使用教程
2019/05/16 Javascript
Vue分页器实现原理详解
2019/06/28 Javascript
vue element-ui实现动态面包屑导航
2019/12/23 Javascript
新手该如何学python怎么学好python?
2008/10/07 Python
Flask框架学习笔记(一)安装篇(windows安装与centos安装)
2014/06/25 Python
详解Python中用于计算指数的exp()方法
2015/05/14 Python
在PyCharm导航区中打开多个Project的关闭方法
2019/01/17 Python
python中str内置函数用法总结
2020/12/27 Python
通过HTML5规范搞定i、em、b、strong元素的区别
2017/03/04 HTML / CSS
澳大利亚排名第一的在线酒类商店:MyBottleShop
2018/04/26 全球购物
提高EJB性能都有哪些技巧
2012/03/25 面试题
行政专员工作职责
2013/12/22 职场文书
2014年最新领导班子整改方案
2014/09/27 职场文书
工作年限证明模板
2014/11/01 职场文书
党支部书记岗位职责
2015/02/15 职场文书
什么是创业计划书?什么是商业计划书?这里一一解答
2019/07/12 职场文书