javascript+php实现根据用户时区显示当地时间的方法

本文实例讲述了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时区的差值

varexp =newDate();

vargmtHours = -(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

functionsetCookie(c_name,value,expiredays){

varexdate=newDate()

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

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

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

}

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

functionisEastEarthTime(newDate)

{

vardj= newDate.getGMTOffset(false);

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

returntrue;

}else{

returnfalse;

}

}

//是否是夏令时

functioninDaylightTime(date){

varstart =newDate(date.getTime());

start.setMonth(0);

start.setDate(1);

start.setHours(0);

start.setMinutes(0);

start.setSeconds(0);

varmiddle =newDate(start.getTime());

middle.setMonth(6);

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

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

{

returnfalse;

}

varmargin = 0;

if(this.isEastEarthTime(date)) {

margin = middle.getTimezoneOffset();

}else{

margin = start.getTimezoneOffset();

}

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

returntrue;

}

returnfalse;

}

//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到本地时间的转换

functiongmt_to_local($time='',$dst= FALSE){

//JavaScript设置Cookie,PHP取值

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

$timezone=$_COOKIE["customer_timezone"];

}else{

$timezone= 0;

}

if($time==''){

returnnow();

}

//时间处理

$time+=$timezone* 3600;

//是否为夏令时

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

{

$dst= TRUE;

}

if($dst== TRUE){

$time+= 3600;

}

returndate("H:i",$time);

}