这段时间给用户做了一个外贸网站,网站主要正对亚洲、欧洲已经美洲的用户,其中有涉及到一个小功能,使用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如何获取客户端时区以及准确显示所在地时间的全部内容,希望对大家的学习和解决疑问有所帮助,也希望大家多多支持武林网。新闻热点
疑难解答