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 HandlerSocket的使用
May 02 PHP
php中3种方法删除字符串中间的空格
Mar 10 PHP
php表单敏感字符过滤类
Dec 08 PHP
PHP模拟asp中response类实现方法
Aug 08 PHP
weiphp微信公众平台授权设置
Jan 04 PHP
php中使用websocket详解
Sep 23 PHP
浅谈php中变量的数据类型判断函数
Mar 04 PHP
PHP实现登陆并抓取微信列表中最新一组微信消息的方法
Jul 10 PHP
php弹出提示框的是实例写法
Sep 26 PHP
laravel 获取当前url的别名方法
Oct 11 PHP
laravel实现上传图片并在页面显示的例子
Oct 14 PHP
解决thinkphp5未定义变量会抛出异常,页面错误,请稍后再试的问题
Oct 16 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
生成ubuntu自动切换壁纸xml文件的php代码
2010/07/17 PHP
php使用ICQ网关发送手机短信
2013/10/30 PHP
PHP中两个float(浮点数)比较实例分析
2015/09/27 PHP
Ext javascript建立超链接,进行事件处理的实现方法
2009/03/22 Javascript
javascript整除实现代码
2010/11/23 Javascript
关于用Jquery的height()、width()计算动态插入的IMG标签的宽高的问题
2010/12/08 Javascript
javascript 设为首页与加入收藏兼容多浏览器代码
2011/01/11 Javascript
js下获得客户端操作系统的函数代码(1:vista,2:windows7,3:2000,4:xp,5:2003,6:2008)
2011/10/31 Javascript
jQuery ajax dataType值为text json探索分享
2013/09/23 Javascript
基于Node.js实现nodemailer邮件发送
2016/01/26 Javascript
JQuery的Pager分页器实现代码
2016/05/03 Javascript
Angular1.x自定义指令实例详解
2017/03/01 Javascript
解析Vue.js中的组件
2018/02/02 Javascript
在vscode里使用.vue代码模板的方法
2018/04/28 Javascript
nodejs用gulp管理前端文件方法
2018/06/24 NodeJs
区别JavaScript函数声明与变量声明
2018/09/12 Javascript
微信小程序五子棋游戏AI实现方法【附demo源码下载】
2019/02/20 Javascript
python抓取网页中链接的静态图片
2018/01/29 Python
利用python 更新ssh 远程代码 操作远程服务器的实现代码
2018/02/08 Python
python保存数据到本地文件的方法
2018/06/23 Python
python实现ID3决策树算法
2018/08/29 Python
django 做 migrate 时 表已存在的处理方法
2019/08/31 Python
使用opencv中匹配点对的坐标提取方式
2020/06/04 Python
python 使用建议与技巧分享(四)
2020/08/18 Python
Python项目实战之使用Django框架实现支付宝付款功能
2021/02/23 Python
你的自行车健身专家:FaFit24
2016/11/16 全球购物
网络工程师的自我评价
2013/10/02 职场文书
国贸专业个人求职信范文
2014/01/08 职场文书
2014年计算机专业个人自我评价
2014/01/19 职场文书
考试没考好检讨书
2014/01/31 职场文书
酒店值班经理的工作职责范本
2014/02/18 职场文书
2014年班干部工作总结
2014/11/25 职场文书
委托证明范本
2014/11/25 职场文书
JS监听Esc 键触发事键
2021/04/14 Javascript
Vue Element UI自定义描述列表组件
2021/05/18 Vue.js
详解JSON.parse和JSON.stringify用法
2022/02/18 Javascript