PHP跨时区(UTC时间)应用解决方案


Posted in PHP onJanuary 11, 2013

1.将程序内部时区设置为UTC时间.(UTC 也可以叫 GMT)
PHP设置:
date_default_timezone_set("UTC");
Yii设置:
config/main.php 中添加 :'timeZone'=>'UTC',
如此设置后,PHP生成的时间基本都是UTC时间了.例如:
//输出当前UTC时间
date("Y-m-d H:i:s");

2.数据库中存储UTC时间.
可以用PHP控制,也可以通过设置数据库时区来实现.

3.服务端发送到前端的时间均为UTC时间格式, 由JS将其转换为本地时间后进行显示.JS内部数据与显示数据分离.
JS转换函数参考:

/** 
* 将UTC时间转为本地时间 
* @param string utcTime utc时间字符串 格式 :'Y-m-d H:i:s' 
* @return string 本地时间字符串 格式 :'Y-m-d H:i:s' 
*/ 
function utcToLocal(utcTime) { 
if(utcTime==='0000-00-00 00:00:00' || utcTime===null || utcTime==='' || utcTime===undefined) 
return utcTime; 
var locTime = new Date(); //local时间对象 
utcTime=utcTime.replace("-", "/").replace("-", "/"); //火狐不兼容'-'分隔日期 
//解析字符串及本地时间赋值 
locTime.setTime(Date.parse(utcTime)-locTime.getTimezoneOffset()*60000); 
//本地时间字符串格式化 
var year = locTime.getFullYear(); 
var month = preZero(locTime.getMonth()+1); 
var date = preZero(locTime.getDate()); 
var hour = preZero(locTime.getHours()); 
var minute = preZero(locTime.getMinutes()); 
var second = preZero(locTime.getSeconds()); 
return year+'-'+month+'-'+date+' '+hour+':'+minute+':'+second; 
} 
/** 
* 将本地时间转为UTC时间 
* @param string locTime utc时间字符串 格式 :'Y-m-d H:i:s' 
* @return string 本地时间字符串 格式 :'Y-m-d H:i:s' 
*/ 
function localToUtc(locTime) { 
if(locTime==='0000-00-00 00:00:00' || locTime==='0000-00-00' || locTime===null || locTime==='' || locTime===undefined) 
return locTime; 
var tmpTime = new Date(); 
var utcTime = new Date(); 
locTime=locTime.replace("-", "/").replace("-", "/"); //火狐不兼容'-'分隔日期 
//解析字符串 
tmpTime.setTime(Date.parse(locTime)); 
if(locTime.length>10) { 
var year = tmpTime.getUTCFullYear(); 
var month = preZero(tmpTime.getUTCMonth()+1); 
var date = preZero(tmpTime.getUTCDate()); 
var hour = preZero(tmpTime.getUTCHours()); 
var minute = preZero(tmpTime.getUTCMinutes()); 
var second = preZero(tmpTime.getUTCSeconds()); 
return year+'-'+month+'-'+date +' '+hour+':'+minute+':'+second; 
} else { 
//设置日期,保留本地时间(供UTC转换用) 
utcTime.setFullYear(tmpTime.getFullYear()); 
utcTime.setMonth(tmpTime.getMonth());utcTime.setMonth(tmpTime.getMonth());//?若不重复,则赋值无效 
utcTime.setDate(tmpTime.getDate()); 
var year = utcTime.getUTCFullYear(); 
var month = preZero(utcTime.getUTCMonth()+1); 
var date = preZero(utcTime.getUTCDate()); 
return year+'-'+month+'-'+date; 
} 
} 
//单个数字添加前导0 
function preZero(str) { 
return str.toString().length<2 ? '0'+str : str; 
}
PHP 相关文章推荐
PHP 数字左侧自动补0
Mar 31 PHP
将文件夹压缩成zip文件的php代码
Dec 14 PHP
PHP提示Notice: Undefined variable的解决办法
Nov 24 PHP
php图片的裁剪与缩放生成符合需求的缩略图
Jan 11 PHP
基于PHP常用函数的用法详解
May 10 PHP
php常用Stream函数集介绍
Jun 24 PHP
PHP调用JAVA的WebService简单实例
Mar 11 PHP
PHP并发多进程处理利器Gearman使用介绍
May 16 PHP
PHP实现截取中文字符串不出现?号的解决方法
Dec 29 PHP
PHP实现获取第一个中文首字母并进行排序的方法
May 09 PHP
Thinkphp5 自定义上传文件名的实现方法
Jul 23 PHP
基于laravel belongsTo使用详解
Oct 18 PHP
PHP编程函数安全篇
Jan 08 #PHP
php中定时计划任务的实现原理
Jan 08 #PHP
整理的一些实用WordPress后台MySQL操作命令
Jan 07 #PHP
PHP中设置时区,记录日志文件的实现代码
Jan 07 #PHP
PHP基础教程(php入门基础教程)一些code代码
Jan 06 #PHP
将博客园(cnblogs.com)数据导入到wordpress的代码
Jan 06 #PHP
PHP表单递交控件名称含有点号(.)会被转化为下划线(_)的处理方法
Jan 06 #PHP
You might like
php防盗链的常用方法小结
2010/07/02 PHP
php5.5新数组函数array_column使用
2013/07/08 PHP
PHP中的traits实现代码复用使用实例
2015/05/13 PHP
Zend Studio使用技巧两则
2016/04/01 PHP
php设计模式之建造器模式分析【星际争霸游戏案例】
2020/01/23 PHP
jquery 图片Silhouette Fadeins渐显效果
2010/02/07 Javascript
Asp.net下使用Jquery Ajax传送和接收DataTable的代码
2010/09/12 Javascript
js bind 函数 使用闭包保存执行上下文
2011/12/26 Javascript
jQuery插件的写法分享
2013/06/12 Javascript
Jquery获得控件值的三种方法总结
2014/02/13 Javascript
JavaScript时间操作之年月日星期级联操作
2016/01/15 Javascript
jQuery实现最简单的切换图效果【可兼容IE6、火狐、谷歌、opera等】
2016/09/04 Javascript
基于jQuery实现定位导航位置效果
2017/11/15 jQuery
webpack热模块替换(HMR)/热更新的方法
2018/04/05 Javascript
浅谈redux以及react-redux简单实现
2018/08/28 Javascript
JS前端知识点总结之内置对象,日期对象和定时器相关操作
2019/07/05 Javascript
vue中动态select的使用方法示例
2019/10/28 Javascript
Vue中使用JsonView来展示Json树的实例代码
2020/11/16 Javascript
[01:14:10]2014 DOTA2国际邀请赛中国区预选赛 SPD-GAMING VS Orenda
2014/05/22 DOTA
简单的Python抓taobao图片爬虫
2014/10/26 Python
Python实现计算文件夹下.h和.cpp文件的总行数
2015/04/23 Python
Python数据结构之栈、队列的实现代码分享
2017/12/04 Python
Python数据分析:手把手教你用Pandas生成可视化图表的教程
2018/12/15 Python
python利用插值法对折线进行平滑曲线处理
2018/12/25 Python
python中如何使用分步式进程计算详解
2019/03/22 Python
在Python中append以及extend返回None的例子
2019/07/20 Python
python多线程并发及测试框架案例
2019/10/15 Python
使用OpenCV校准鱼眼镜头的方法
2020/11/26 Python
python Xpath语法的使用
2020/11/26 Python
保险公司早会主持词
2014/03/22 职场文书
学习优秀党务工作者先进事迹材料思想报告
2014/09/17 职场文书
个人事迹材料怎么写
2014/12/30 职场文书
反四风问题学习心得体会
2016/01/22 职场文书
工人先锋号事迹材料(2016精选版)
2016/03/01 职场文书
详细介绍python类及类的用法
2021/05/31 Python
Go语言设计模式之结构型模式
2021/06/22 Golang