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 当前日期加(天、周、月、年)
Aug 09 Javascript
jquery ajax 调用失败的原因示例介绍
Sep 27 Javascript
a标签click和href执行顺序探讨
Jun 23 Javascript
js实现网页图片延时加载 提升网页打开速度
Jan 26 Javascript
javascript 四十条常用技巧大全
Sep 09 Javascript
jsp 网站引入外部css或者js失效问题解决
Oct 31 Javascript
jQuery实现淡入淡出的模态框
Feb 09 Javascript
作为老司机使用 React 总结的 11 个经验教训
Apr 08 Javascript
详解小程序rich-text对富文本支持方案
Nov 28 Javascript
JavaScript的查询机制LHS和RHS解析
Aug 16 Javascript
vue-video-player 解决微信自动全屏播放问题(横竖屏导致样式错乱问题)
Feb 25 Javascript
微信小程序12行js代码自己写个滑块功能(推荐)
Jul 15 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图片上传程序
2008/03/27 PHP
ThinkPHP3.1新特性之对Ajax的支持更加完善
2014/06/19 PHP
jQuery Mobile + PHP实现文件上传
2014/12/12 PHP
PHP简单预防sql注入的方法
2016/09/27 PHP
读jQuery之十一 添加事件核心方法
2011/07/31 Javascript
JQuery 操作/获取table具体代码
2013/06/13 Javascript
jQuery中多个元素的Hover事件解决方案
2014/06/12 Javascript
给应用部分的js代码设定一个统一的入口
2014/06/15 Javascript
JS实现可直接显示网页代码运行效果的HTML代码预览功能实例
2015/08/06 Javascript
javascript insertAfter()定义与用法示例
2016/07/25 Javascript
JS判断来路是否是百度等搜索索引进行弹窗或自动跳转的实现代码
2016/10/09 Javascript
JavaScript中日常收集常见的10种错误(推荐)
2017/01/08 Javascript
微信小程序开发图片拖拽实例详解
2017/05/05 Javascript
使用vue和datatables进行表格的服务器端分页实例代码
2017/06/07 Javascript
Vue.js中的图片引用路径的方式
2017/07/28 Javascript
200行代码实现blockchain 区块链实例详解
2018/03/14 Javascript
Node.js API详解之 Error模块用法实例分析
2020/05/14 Javascript
基于JS实现操作成功之后自动跳转页面
2020/09/25 Javascript
[06:15]2016国际邀请赛中国区预选赛单车采访:我顶WINGS
2016/06/27 DOTA
python基础教程之lambda表达式使用方法
2014/02/12 Python
解析Python中的异常处理
2015/04/28 Python
Python实现字符串与数组相互转换功能示例
2017/09/22 Python
基于python实现聊天室程序
2018/07/27 Python
django DRF图片路径问题的解决方法
2018/09/10 Python
Python3 tkinter 实现文件读取及保存功能
2019/09/12 Python
详解Python可视化神器Yellowbrick使用
2019/11/11 Python
python实现吃苹果小游戏
2020/03/21 Python
Pycharm安装第三方库失败解决方案
2020/11/17 Python
CSS3 3D制作实战案例分析
2016/09/18 HTML / CSS
button在IE6/7下的黑边去除方案
2012/12/24 HTML / CSS
使用HTML5 Geolocation实现一个距离追踪器
2018/04/09 HTML / CSS
计算机应用专业学生的自我评价分享
2013/11/03 职场文书
一年级语文教学反思
2014/02/13 职场文书
个人总结格式范文
2015/03/09 职场文书
侵犯商业秘密的律师函
2015/05/27 职场文书
2022新作动画《福星小子》释出宣传影片 加入内田真礼&宫野真守配音演出
2022/04/08 日漫