本文实例讲述了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​​​​);​


​}​