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全局函数使用简单说明
Mar 11 Javascript
jquery 单引号和双引号的区别及使用注意
Jul 31 Javascript
一个支持任意尺寸的图片上下左右滑动效果
Aug 24 Javascript
Jquery中$.post和$.ajax的用法小结
Apr 28 Javascript
javascript实现判断鼠标的状态
Jul 10 Javascript
IE10中flexigrid无法显示数据的解决方法
Jul 26 Javascript
jQuery实现图片左右滚动特效
Apr 20 Javascript
Javascript 跨域知识详细介绍
Oct 30 Javascript
js 打开新页面在屏幕中间的实现方法
Nov 02 Javascript
vue2.0 实现导航守卫的具体用法(路由守卫)
May 17 Javascript
JS加密插件CryptoJS实现AES加密操作示例
Aug 16 Javascript
JS学习笔记之贪吃蛇小游戏demo实例详解
May 29 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 不错的学习资料
2009/02/06 PHP
关于svn冲突的解决方法
2013/06/21 PHP
PHP实现对站点内容外部链接的过滤方法
2014/09/10 PHP
thinkphp循环结构用法实例
2014/11/24 PHP
php中使用sftp教程
2015/03/30 PHP
php实现搜索一维数组元素并删除二维数组对应元素的方法
2015/07/06 PHP
浅谈PHP中output_buffering
2015/07/13 PHP
php自定义中文字符串截取函数substr_for_gb2312及substr_for_utf8示例
2016/05/28 PHP
来自国外的14个图片放大编辑的jQuery插件整理
2010/10/20 Javascript
JS重要知识点小结
2011/11/06 Javascript
jQuery实现的多屏图像图层切换效果实例
2015/05/07 Javascript
jQuery文字横向滚动效果的实现代码
2016/05/31 Javascript
JavaScript原生节点操作小结
2017/01/17 Javascript
jquery将标签元素的高设为屏幕的百分比
2017/04/19 jQuery
前端开发不得不知的10个最佳ES6特性
2017/08/30 Javascript
Vue中的异步组件函数实现代码
2018/07/20 Javascript
简单了解Vue + ElementUI后台管理模板
2020/04/07 Javascript
python的re模块应用实例
2014/09/26 Python
python+opencv实现阈值分割
2018/12/26 Python
Flask模板引擎之Jinja2语法介绍
2019/06/26 Python
Python列表与元组的异同详解
2019/07/02 Python
Python3 合并二叉树的实现
2019/09/30 Python
使用matlab或python将txt文件转为excel表格
2019/11/01 Python
Python Selenium安装及环境配置的实现
2020/03/17 Python
解决paramiko执行命令超时的问题
2020/04/16 Python
Pycharm配置autopep8实现流程解析
2020/11/28 Python
python基于爬虫+django,打造个性化API接口
2021/01/21 Python
娇韵诗俄罗斯官方网站:Clarins俄罗斯
2020/10/03 全球购物
奥地利时尚、美容、玩具和家居之家:Kastner & Öhler
2020/04/26 全球购物
中职生自我鉴定范文
2013/10/03 职场文书
领导失职检讨书
2014/02/24 职场文书
初中作文评语大全
2014/04/23 职场文书
爱心捐书活动总结
2014/07/05 职场文书
党的群众路线教育实践活动自我剖析材料
2014/10/08 职场文书
学校党的群众路线教育实践活动制度建设计划
2014/11/03 职场文书
MySql数据库触发器使用教程
2022/06/01 MySQL