這篇文章主要介紹了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);
- }
希望本文所述對大家的php程序設計有所幫助。
新聞熱點
疑難解答