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

这篇文章主要介绍了javascript+php实现根据用户时区显示当地时间的方法,实例分析javascript获取客户端时区及与服务器端php交互的技巧,具有一定参考借鉴价值,需要的朋友可以参考下

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

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

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

1. JavaScript代码如下:

  1. window.onload = function() {
  2. //TODO begin 处理登陆用户时区
  3. //获得登陆用户时区与GMT时区的差值
  4. var exp = new Date();
  5. var gmtHours = -(exp.getTimezoneOffset()/60);
  6. setCookie('customer_timezone',gmtHours,1);
  7. //判断是否为夏令时
  8. date = exp.format('yyyy-MM-dd HH:mm:ss');
  9. if(inDaylightTime(date)){
  10. setCookie('inDaylightTime',1,1);
  11. }
  12. }
  13. //设置Cookie
  14. function setCookie(c_name,value,expiredays){
  15. var exdate=new Date()
  16. exdate.setDate(exdate.getDate()+expiredays)
  17. document.cookie=c_name+ "=" +escape(value)+
  18. ((expiredays==null) ? "" : "; expires="+exdate.toGMTString())
  19. }
  20. //判断时间是东半球还是西半球
  21. function isEastEarthTime(newDate)
  22. {
  23. var dj= newDate.getGMTOffset(false);
  24. if (dj.indexOf("-") == -1){
  25. return true;
  26. } else {
  27. return false;
  28. }
  29. }
  30. //是否是夏令时
  31. function inDaylightTime(date){
  32. var start = new Date(date.getTime());
  33. start.setMonth(0);
  34. start.setDate(1);
  35. start.setHours(0);
  36. start.setMinutes(0);
  37. start.setSeconds(0);
  38. var middle = new Date(start.getTime());
  39. middle.setMonth(6);
  40. // 如果年始和年中时差相同,则认为此国家没有夏令时
  41. if ((middle.getTimezoneOffset() - start.getTimezoneOffset()) == 0)
  42. {
  43. return false;
  44. }
  45. var margin = 0;
  46. if (this.isEastEarthTime(date)) {
  47. margin = middle.getTimezoneOffset();
  48. } else {
  49. margin = start.getTimezoneOffset();
  50. }
  51. if (date.getTimezoneOffset() == margin) {
  52. return true;
  53. }
  54. return false;
  55. }
  56. //DONE end

2. 服务器端php代码:

  1. //24小时内 GMT到本地时间的转换
  2. function gmt_to_local($time = '', $dst = FALSE){
  3. //JavaScript设置Cookie,PHP取值
  4. if (isset($_COOKIE["customer_timezone"])){
  5. $timezone = $_COOKIE["customer_timezone"];
  6. }else{
  7. $timezone = 0;
  8. }
  9. if ($time == ''){
  10. return now();
  11. }
  12. //时间处理
  13. $time += $timezone * 3600;
  14. //是否为夏令时
  15. if(isset($_COOKIE["inDaylightTime"]) && $_COOKIE["inDaylightTime"]==1)
  16. {
  17. $dst = TRUE;
  18. }
  19. if ($dst == TRUE){
  20. $time += 3600;
  21. }
  22. return date("H:i",$time);
  23. }