前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用getTimezoneOffset方法修正时差

使用getTimezoneOffset方法修正时差

作者头像
meteoric
发布2018-11-16 15:04:50
9970
发布2018-11-16 15:04:50
举报
文章被收录于专栏:游戏杂谈游戏杂谈

遇到件很奇怪的事情,应用内显示了当前服务器的时间,在一定时间内有双倍经验,可是在美国的玩家反映说她显示的是她客户端的时间(非北京时间),我本地的时间与它截图过来显示的时间相差16小时。

image
image
image
image

究其原因,程序并非直接使用new Date()取的客户端操作系统的时间,而是服务器的时间(Linux事先与某一台时间服务器校对过时间--为北京时间)。而产生问题的根源在于,服务器将它当前时间转成毫秒数后传递给客户端,客户端显示的时候没有进行时差修正。使用getTimezoneOffset()可解决这个问题,因为它返回的是格林威治时间与本地时间之间的时差,而使用new Date()得到的结果,还是相对于本地时间的显示,所以想真正实现客户端与服务器端显示的时间一致,需要做如下调整:

var date:Date = new Date(xx);

var timezoneOffset:Number = date.getTimezoneOffset();

date.setTime(date.getTime() + timezoneOffset * 60 * 1000 + 480 * 60 * 1000);

先使用timezoneOffset()【此方法返回的是分钟】方法获取差值,这个就得到的是格林威治时间,而北京时间相对于它是需要再加上8小时的,也就是 8 * 60 = 480分钟。

这样修正后,再调用格式化方法来显示时间就正常了。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2011-11-04 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档