首页 > 开发 > Php > 正文

PHP如何获取客户端时区以及准确显示所在地时间

2020-07-03 12:48:36
字体:
来源:转载
供稿:网友
这篇文章主要为大家详细介绍了PHP如何获取客户端时区以及准确显示所在地时间,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,有需要的朋友可以收藏方便以后借鉴。

这段时间给用户做了一个外贸网站,网站主要正对亚洲、欧洲已经美洲的用户,其中有涉及到一个小功能,使用PHP实现根据访客的时区给对方显示他们当地时间,并记录。但是有点前端设计的技术都知道PHP是运行在服务器终端的代码,因此也只能获取服务器的时间,所有仅仅使用PHP本身我们是无法获取到客户端时间这个功能的,这里我们需要找到JS来帮忙。

 这里我们使用到JS来保存用户时区信息到COOKIE,然后用服务器端的php读取COOKIE实现根据用户时区显示当地时间的方法来实现,具体实现方法代码如下:

1、JS代码

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);    }}//设置Cookiefunction 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代码

//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);}

通过这2段代码我们就能基本实现PHP显示当地时间了。

以上就是PHP如何获取客户端时区以及准确显示所在地时间的全部内容,希望对大家的学习和解决疑问有所帮助,也希望大家多多支持错新网。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表