本文实例讲述了javascript+php实现根据用户时区显示当地时间的方法。分享给大家供大家参考。具体如下:

在跨时区应用中会用到下面代码,这是以前写的一段代码。

服务器保存相关时间配置,保存形式为GMT时间,客户端需要根据客户所在时区做相应显示,以符合客户习惯。

1. JavaScript代码如下:





​?​



1


2


3


4


5


6


7


8


9


10


11


12


13


14


15


16


17


18


19


20


21


22


23


24


25


26


27


28


29


30


31


32


33


34


35


36


37


38


39


40


41


42


43


44


45


46


47


48


49


50


51


52


53


54


55


56




​window.onload = ​​​​function​​​​() {​


​//TODO begin 处理登陆用户时区​


​//获得登陆用户时区与GMT时区的差值​


​var​​ ​​exp = ​​​​new​​ ​​Date();​


​var​​ ​​gmtHours = -(exp.getTimezoneOffset()/60);​


​setCookie(​​​​'customer_timezone'​​​​,gmtHours,1);​


​//判断是否为夏令时​


​date = exp.format(​​​​'yyyy-MM-dd HH:mm:ss'​​​​);​


​if​​​​(inDaylightTime(date)){​


​setCookie(​​​​'inDaylightTime'​​​​,1,1);​


​}​


​}​


​//设置Cookie​


​function​​ ​​setCookie(c_name,value,expiredays){​


​var​​ ​​exdate=​​​​new​​ ​​Date()​


​exdate.setDate(exdate.getDate()+expiredays)​


​document.cookie=c_name+ ​​​​"="​​ ​​+escape(value)+​


​((expiredays==​​​​null​​​​) ? ​​​​""​​ ​​: ​​​​"; expires="​​​​+exdate.toGMTString())​


​}​


​//判断时间是东半球还是西半球​


​function​​ ​​isEastEarthTime(newDate)​


​{​


​var​​ ​​dj= newDate.getGMTOffset(​​​​false​​​​);​


​if​​ ​​(dj.indexOf(​​​​"-"​​​​) == -1){​


​return​​ ​​true​​​​;​


​} ​​​​else​​ ​​{​


​return​​ ​​false​​​​;​


​}​


​}​


​//是否是夏令时​


​function​​ ​​inDaylightTime(date){​


​var​​ ​​start = ​​​​new​​ ​​Date(date.getTime());​


​start.setMonth(0);​


​start.setDate(1);​


​start.setHours(0);​


​start.setMinutes(0);​


​start.setSeconds(0);​


​var​​ ​​middle = ​​​​new​​ ​​Date(start.getTime());​


​middle.setMonth(6);​


​// 如果年始和年中时差相同,则认为此国家没有夏令时​


​if​​ ​​((middle.getTimezoneOffset() - start.getTimezoneOffset()) == 0) ​


​{​


​return​​ ​​false​​​​;​


​}​


​var​​ ​​margin = 0;​


​if​​ ​​(​​​​this​​​​.isEastEarthTime(date)) {​


​margin = middle.getTimezoneOffset();​


​} ​​​​else​​ ​​{​


​margin = start.getTimezoneOffset();​


​}​


​if​​ ​​(date.getTimezoneOffset() == margin) {​


​return​​ ​​true​​​​;​


​}​


​return​​ ​​false​​​​;​


​}​


​//DONE end​



2. 服务器端php代码:





​?​



1


2


3


4


5


6


7


8


9


10


11


12


13


14


15


16


17


18


19


20


21


22


23


24




​//24小时内 GMT到本地时间的转换​


​function​​ ​​gmt_to_local(​​​​$time​​ ​​= ​​​​''​​​​, ​​​​$dst​​ ​​= FALSE){​


​//JavaScript设置Cookie,PHP取值​


​if​​ ​​(isset(​​​​$_COOKIE​​​​[​​​​"customer_timezone"​​​​])){​


​$timezone​​ ​​= ​​​​$_COOKIE​​​​[​​​​"customer_timezone"​​​​];​


​}​​​​else​​​​{​


​$timezone​​ ​​= 0;​


​}​


​if​​ ​​(​​​​$time​​ ​​== ​​​​''​​​​){​


​return​​ ​​now();​


​}​


​//时间处理​


​$time​​ ​​+= ​​​​$timezone​​ ​​* 3600;​


 


​//是否为夏令时​


​if​​​​(isset(​​​​$_COOKIE​​​​[​​​​"inDaylightTime"​​​​]) && ​​​​$_COOKIE​​​​[​​​​"inDaylightTime"​​​​]==1)​


​{​


​$dst​​ ​​= TRUE;​


​}​


​if​​ ​​(​​​​$dst​​ ​​== TRUE){​


​$time​​ ​​+= 3600;​


​}​


​return​​ ​​date​​​​(​​​​"H:i"​​​​,​​​​$time​​​​);​


​}​