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 相关文章推荐
JavaScript 全面解析各种浏览器网页中的JS 执行顺序
Feb 17 Javascript
jquery 自定义容器下雨效果可将下雨图标改为其他
Apr 23 Javascript
js+jquery常用知识点汇总
Mar 03 Javascript
Bootstrap实现默认导航栏效果
Sep 21 Javascript
深入理解JavaScript 函数
Jun 06 Javascript
完美解决jQuery fancybox ie 无法显示关闭按钮的问题
Nov 29 Javascript
jQuery图片切换动画效果
Feb 28 Javascript
搭建element-ui的Vue前端工程操作实例
Feb 23 Javascript
微信小程序开发之改变data中数组或对象的某一属性值
Jul 05 Javascript
Layui数据表格之获取表格中所有的数据方法
Aug 20 Javascript
CountUp.js数字滚动插件使用方法详解
Oct 17 Javascript
一文彻底理解js原生语法prototype,__proto__和constructor
Oct 24 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
php中文乱码怎么办如何让浏览器自动识别utf-8
2014/01/15 PHP
Laravel中基于Artisan View扩展包创建及删除应用视图文件的方法
2016/10/08 PHP
PHP框架Laravel中实现supervisor执行异步进程的方法
2017/06/07 PHP
Javascript中的Split使用方法与技巧
2007/03/09 Javascript
Jquery实现网页跳转或用命令打开指定网页的解决方法
2013/07/09 Javascript
JavaScript eval() 函数介绍及应用示例
2014/07/29 Javascript
JavaScript实现计算字符串中出现次数最多的字符和出现的次数
2015/03/12 Javascript
JSON字符串和对象之间的转换详解
2015/05/26 Javascript
ANGULARJS中使用JQUERY分页控件
2015/09/16 Javascript
判断JS对象是否拥有某属性的方法推荐
2016/05/12 Javascript
Jquery实现select multiple左右添加和删除功能的简单实例
2016/05/26 Javascript
AngularJS基础 ng-hide 指令用法及示例代码
2016/08/01 Javascript
jQuery实现的多张图无缝滚动效果【测试可用】
2016/09/12 Javascript
详解如何构建Angular项目目录结构
2017/07/13 Javascript
js导出Excel表格超出26位英文字符的解决方法ES6
2017/11/15 Javascript
详解vue中router-link标签所必备了解的属性
2019/04/15 Javascript
babel7.x和webpack4.x配置vue项目的方法步骤
2019/05/12 Javascript
vue 如何从单页应用改造成多页应用
2020/10/23 Javascript
python使用win32com库播放mp3文件的方法
2015/05/30 Python
通过Python使用saltstack生成服务器资产清单
2016/03/01 Python
Python进度条实时显示处理进度的示例代码
2018/01/30 Python
python:pandas合并csv文件的方法(图书数据集成)
2018/04/12 Python
Python3.5字符串常用操作实例详解
2019/05/01 Python
Django利用cookie保存用户登录信息的简单实现方法
2019/05/27 Python
Python把图片转化为pdf代码实例
2020/07/28 Python
我看到了用指针调用函数的不同语法形式
2014/07/16 面试题
思想品德自我鉴定
2013/10/12 职场文书
计算机相关的自我评价
2014/01/15 职场文书
宿舍标语大全
2014/06/19 职场文书
党支部创先争优活动总结
2014/08/28 职场文书
2015年世界无烟日活动总结
2015/02/10 职场文书
2015年学校党建工作总结
2015/05/19 职场文书
演讲稿之我的初心我的成长
2019/08/12 职场文书
使用canvas实现雪花飘动效果的示例代码
2021/03/30 HTML / CSS
基于Python编写简易版的天天跑酷游戏的示例代码
2022/03/23 Python
实战Python爬虫爬取酷我音乐
2022/04/11 Python