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无阻塞加载具体方式
Jun 28 Javascript
JS判定是否原生方法
Jul 22 Javascript
jquery淡化版banner异步图片文字效果切换图片特效
Apr 08 Javascript
使用JavaScript实现连续滚动字幕效果的方法
Jul 07 Javascript
JavaScript实现输入框(密码框)出现提示语
Jan 12 Javascript
Easyui Tree获取当前选择节点的所有顶级父节点
Feb 14 Javascript
详解使用Node.js 将txt文件转为Excel文件
Jul 05 Javascript
利用纯JS实现像素逐渐显示的方法示例
Aug 14 Javascript
详解Vue单元测试Karma+Mocha学习笔记
Jan 31 Javascript
详解微信小程序开发(项目从零开始)
Jun 06 Javascript
详细介绍解决vue和jsp结合的方法
Feb 06 Javascript
JS前后端实现身份证号验证代码解析
Jul 23 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的Yii框架中使用行为Behaviors的方法
2016/03/18 PHP
LaravelS通过Swoole加速Laravel/Lumen详解
2018/03/02 PHP
自己的js工具 Event封装
2009/08/21 Javascript
javascript 精粹笔记
2010/05/09 Javascript
js钢琴按钮波浪式图片排列效果代码分享
2015/08/26 Javascript
JS代码实现根据时间变换页面背景效果
2016/06/16 Javascript
jquery实现(textarea)placeholder自动换行
2016/12/22 Javascript
js弹性势能动画之抛物线运动实例详解
2017/07/27 Javascript
vue裁切预览组件功能的实现步骤
2018/05/04 Javascript
Javascript获取某个月的天数
2018/05/30 Javascript
JS实现用特殊符号替换字符串的中间部分区域的实例代码
2018/07/24 Javascript
微信小程序中this.data与this.setData的区别详解
2018/09/17 Javascript
React SSR样式及SEO的实践
2018/10/22 Javascript
微信小程序按钮点击跳转页面详解
2019/05/06 Javascript
微信sdk实现禁止微信分享(使用原生php实现)
2019/11/15 Javascript
Vue中的this.$options.data()和this.$data用法说明
2020/07/26 Javascript
vue操作dom元素的3种方法示例
2020/09/20 Javascript
[02:44]DOTA2英雄基础教程 克林克兹
2014/01/15 DOTA
python3.0 字典key排序
2008/12/24 Python
Python中logging模块的用法实例
2014/09/29 Python
python学习笔记之调用eval函数出现invalid syntax错误问题
2015/10/18 Python
Python标准库shutil用法实例详解
2018/08/13 Python
对python实现模板生成脚本的方法详解
2019/01/30 Python
Python Numpy 自然数填充数组的实现
2019/11/28 Python
keras topN显示,自编写代码案例
2020/07/03 Python
keras自动编码器实现系列之卷积自动编码器操作
2020/07/03 Python
VSCode中autopep8无法运行问题解决方案(提示Error: Command failed,usage)
2021/03/02 Python
CSS去掉A标签(链接)虚线框的方法
2014/04/01 HTML / CSS
美国网上订购鲜花:FTD
2016/09/23 全球购物
Nike德国官网:Nike.com (DE)
2018/11/13 全球购物
全球性的在线婚纱礼服工厂:27dress.com
2019/03/21 全球购物
毕业留言寄语大全
2014/04/10 职场文书
个人党性锻炼总结
2015/03/05 职场文书
舞出我人生观后感
2015/06/16 职场文书
预备党员表决心的话
2015/09/22 职场文书
Python爬虫之用Xpath获取关键标签实现自动评论盖楼抽奖(二)
2021/06/07 Python