javascript+php实现根据用户时区显示当地时间的方法
这篇文章主要介绍了javascript+php实现根据用户时区显示当地时间的方法,实例分析javascript获取客户端时区及与服务器端php交互的技巧,具有一定参考借鉴价值,需要的朋友可以参考下
本文实例讲述了javascript+php实现根据用户时区显示当地时间的方法。分享给大家供大家参考。具体如下:
在跨时区应用中会用到下面代码,这是以前写的一段代码。
服务器保存相关时间配置,保存形式为GMT时间,客户端需要根据客户所在时区做相应显示,以符合客户习惯。
1. JavaScript代码如下:
- 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代码:
- //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);
- }