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 相关文章推荐
asp(javascript)全角半角转换代码 dbc2sbc
Aug 06 Javascript
javascript框架设计读书笔记之种子模块
Dec 02 Javascript
JQuery通过AJAX从后台获取信息显示在表格上并支持行选中
Sep 15 Javascript
老司机带你解读jQuery插件开发流程
May 16 Javascript
KnockoutJS 3.X API 第四章之表单textInput、hasFocus、checked绑定
Oct 11 Javascript
基于JavaScript实现右键菜单和拖拽功能
Nov 28 Javascript
Bootstrap基本样式学习笔记之表格(2)
Dec 07 Javascript
footer定位页面底部(代码分享)
Mar 07 Javascript
jQuery 利用ztree实现树形表格的实例代码
Sep 27 jQuery
jQuery实现炫丽的3d旋转星空效果
Jul 04 jQuery
Vue中多个元素、组件的过渡及列表过渡的方法示例
Feb 13 Javascript
vue+element-ui+axios实现图片上传
Aug 20 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
用mysql内存表来代替php session的类
2009/02/01 PHP
php设计模式 Factory(工厂模式)
2011/06/26 PHP
Thinkphp 框架基础之入口文件功能、定义与用法分析
2020/04/27 PHP
初学prototype,发个JS接受URL参数的代码
2006/09/25 Javascript
JS+DIV实现鼠标划过切换层效果的实例代码
2013/11/26 Javascript
浅析jquery的作用与优势
2013/12/02 Javascript
jquery实现手机发送验证码的倒计时代码
2014/02/12 Javascript
解决自定义$(id)的方法与jquery选择器$冲突的问题
2014/06/14 Javascript
浅谈JavaScript Array对象
2014/12/29 Javascript
innerHTML中标签可以换行的方法汇总
2015/08/14 Javascript
JS常见问题之为什么点击弹出的i总是最后一个
2016/01/05 Javascript
jQuery中$.each()函数的用法引申实例
2016/05/12 Javascript
jQuery实现的省市县三级联动菜单效果完整实例
2016/08/01 Javascript
jquery请求servlet实现ajax异步请求的示例
2017/06/03 jQuery
Vue列表页渲染优化详解
2017/07/24 Javascript
nodejs 如何手动实现服务器
2018/08/20 NodeJs
最适应的vue.js的form提交涉及多种插件【推荐】
2018/08/27 Javascript
详解vue文件中使用echarts.js的两种方式
2018/10/18 Javascript
浅谈Angular 观察者模式理解
2018/11/01 Javascript
多个vue子路由文件自动化合并的方法
2019/09/03 Javascript
JavaScript实现左右滚动电影画布
2020/02/06 Javascript
vue+iview使用树形控件的具体使用
2020/11/02 Javascript
[02:39]DOTA2英雄基础教程 天怒法师
2013/11/29 DOTA
在Python中使用PIL模块对图片进行高斯模糊处理的教程
2015/05/05 Python
python实现查找excel里某一列重复数据并且剔除后打印的方法
2015/05/26 Python
python中dict字典的查询键值对 遍历 排序 创建 访问 更新 删除基础操作方法
2018/09/13 Python
Python实现数据结构线性链表(单链表)算法示例
2019/05/04 Python
vscode写python时的代码错误提醒和自动格式化的方法
2020/05/07 Python
CSS3 Columns分列式布局方法简介
2014/05/03 HTML / CSS
ABOUT YOU罗马尼亚:超过600个时尚品牌
2019/09/19 全球购物
电大毕业个人生自我鉴定
2014/03/26 职场文书
小学数学课题方案
2014/06/15 职场文书
thinkphp 获取控制器及控制器方法
2021/04/16 PHP
了解Redis常见应用场景
2021/06/23 Redis
GO语言字符串处理函数之处理Strings包
2022/04/14 Golang