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网页关闭时提醒效果脚本
Oct 22 Javascript
javascript 动态设置已知select的option的value值的代码
Dec 16 Javascript
JavaScript中的类与实例实现方法
Jan 23 Javascript
JS实现的多张图片轮流播放幻灯片效果
Jul 22 Javascript
详解获取jq ul第一个li定位的四种解决方案
Nov 23 Javascript
vue的mixins属性详解
Mar 14 Javascript
详解Vue-cli中的静态资源管理(src/assets和static/的区别)
Jun 19 Javascript
对angularJs中2种自定义服务的实例讲解
Sep 30 Javascript
ligerUI的ligerDialog关闭刷新的方法
Sep 27 Javascript
js中script的上下放置区别,Dom的增删改创建操作实例分析
Dec 16 Javascript
js实现无缝轮播图
Mar 09 Javascript
详解template标签用法(含vue中的用法总结)
Jan 12 Vue.js
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取得一个类的属性和方法的实现代码
2011/05/22 PHP
php数组函数序列之asort() - 对数组的元素值进行升序排序,保持索引关系
2011/11/02 PHP
PHP的一个完美GIF等比缩放类,附带去除缩放黑背景
2014/04/01 PHP
php将textarea数据提交到mysql出现很多空格的解决方法
2014/12/19 PHP
PHP使用反向Ajax技术实现在线客服系统详解
2019/07/01 PHP
JS获得QQ号码的昵称,头像,生日的简单实例
2013/12/04 Javascript
jquery.idTabs 选项卡使用示例代码
2014/09/03 Javascript
JavaScript中Cookies的相关使用教程
2015/06/04 Javascript
JS实现选项卡实例详解
2015/11/17 Javascript
JQuery+EasyUI轻松实现步骤条效果
2016/02/22 Javascript
Bootstrap CSS组件之按钮下拉菜单
2016/12/17 Javascript
微信小程序实战之顶部导航栏(选项卡)(1)
2020/06/19 Javascript
简单实现js点击展开二级菜单功能
2017/05/16 Javascript
js 开发之autocomplete=&quot;off&quot;在chrom中失效的解决办法
2017/09/28 Javascript
JavaScript代码实现txt文件的上传预览功能
2018/03/27 Javascript
JavaScript 截取字符串代码实例
2019/09/05 Javascript
js实现百度淘宝搜索功能
2020/02/17 Javascript
python smtplib模块自动收发邮件功能(一)
2018/05/22 Python
python实现最长公共子序列
2018/05/22 Python
Python读取系统文件夹内所有文件并统计数量的方法
2018/10/23 Python
Python中使用__new__实现单例模式并解析
2019/06/25 Python
浅谈Python中函数的定义及其调用方法
2019/07/19 Python
关于python字符串方法分类详解
2019/08/20 Python
浅谈python累加求和+奇偶数求和_break_continue
2020/02/25 Python
一款基于css3的列表toggle特效实例教程
2015/01/04 HTML / CSS
CSS3 Flex 弹性布局实例代码详解
2018/11/01 HTML / CSS
html5嵌入内容_动力节点Java学院整理
2017/07/07 HTML / CSS
实习自荐信
2013/10/13 职场文书
剪彩仪式主持词
2014/03/19 职场文书
护理专业求职信
2014/06/15 职场文书
协会周年庆活动方案
2014/08/26 职场文书
期末个人总结范文
2015/02/13 职场文书
2015年幼儿园中班工作总结
2015/04/25 职场文书
Nginx解决前端访问资源跨域问题的方法详解
2021/03/31 Servers
python中的class_static的@classmethod的巧妙用法
2021/06/22 Python
Win11如何默认打开软件界面最大化?Win11默认打开软件界面最大化的方法
2022/07/15 数码科技