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 相关文章推荐
基于HTTP长连接的&quot;服务器推&quot;技术的php 简易聊天室
Oct 31 PHP
php shell超强免杀、减少体积工具实现代码
Oct 16 PHP
解析PHP 使用curl提交json格式数据
Jun 29 PHP
为PHP安装imagick时出现Cannot locate header file MagickWand.h错误的解决方法
Nov 03 PHP
php实现汉字验证码和算式验证码的方法
Mar 07 PHP
浅谈php提交form表单
Jul 01 PHP
php精确的统计在线人数的方法
Oct 21 PHP
详解PHP中foreach的用法和实例
Oct 25 PHP
PHP连接MySQL进行增、删、改、查操作
Feb 19 PHP
Yii 2.0实现联表查询加搜索分页的方法示例
Aug 02 PHP
PHP实现小程序批量通知推送
Nov 27 PHP
解决PhpStorm64不能启动的问题
Jun 20 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面向对象精要总结
2014/11/07 PHP
如何利用http协议发布博客园博文评论
2015/08/03 PHP
php json中文编码为null的解决办法
2016/12/14 PHP
PHP操作Redis常用命令的实例详解
2020/12/23 PHP
让回调函数 showResponse 也带上参数的代码
2007/08/13 Javascript
JQuery上传插件Uploadify使用详解及错误处理
2010/04/27 Javascript
JavaScript中window、doucment、body的解释
2013/08/14 Javascript
kindeditor编辑器点中图片滚动条往上顶的bug
2015/07/05 Javascript
JavaScript性能优化之函数节流(throttle)与函数去抖(debounce)
2016/08/11 Javascript
iOS和Android用同一个二维码实现跳转下载链接的方法
2016/09/28 Javascript
微信小程序中的onLoad详解及简单实例
2017/04/05 Javascript
js实现网页的两个input标签内的数值加减(示例代码)
2017/08/15 Javascript
vue实现选项卡及选项卡切换效果
2018/04/24 Javascript
ng-events类似ionic中Events的angular全局事件
2018/09/05 Javascript
React 使用recharts实现散点地图的示例代码
2018/12/07 Javascript
浅谈Angular单元测试总结
2019/03/22 Javascript
彻底搞懂并解决vue-cli4中图片显示的问题实现
2020/08/31 Javascript
Nodejs 微信小程序消息推送的实现
2021/01/20 NodeJs
[01:01]青春无憾,一战成名——DOTA2全国高校联赛开启
2018/02/25 DOTA
[00:34]拔城逐梦,热血永恒!2020(秋)完美世界城市挑战赛报名开启
2020/10/09 DOTA
解决pyecharts在jupyter notebook中使用报错问题
2020/04/23 Python
Flask配置Cors跨域的实现
2019/07/12 Python
基于python的selenium两种文件上传操作实现详解
2019/09/19 Python
python数据库开发之MongoDB安装及Python3操作MongoDB数据库详细方法与实例
2020/03/18 Python
解决Pycharm双击图标启动不了的问题(JetBrains全家桶通用)
2020/08/07 Python
Python使用urlretrieve实现直接远程下载图片的示例代码
2020/08/17 Python
探索HTML5本地存储功能运用技巧
2016/03/02 HTML / CSS
全球性的众包图形设计市场:DesignCrowd
2021/02/02 全球购物
大四学年自我鉴定
2013/11/13 职场文书
《老山界》教学反思
2014/04/08 职场文书
目标管理责任书
2014/04/15 职场文书
优秀护士先进事迹
2014/05/08 职场文书
弘扬焦裕禄精神走群众路线思想汇报
2014/09/12 职场文书
学习普通话的体会
2014/11/07 职场文书
2016大学自主招生推荐信范文
2015/03/23 职场文书
python使用pymysql模块操作MySQL
2021/06/16 Python