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下实现折线图效果的代码
Apr 28 PHP
真正的ZIP文件操作类(php)
Jul 21 PHP
php 文件上传类代码
Aug 06 PHP
php读取mysql乱码,用set names XXX解决的原理分享
Dec 29 PHP
ueditor 1.2.6 使用方法说明
Jul 24 PHP
PHP数组排序之sort、asort与ksort用法实例
Sep 08 PHP
thinkPHP框架对接支付宝即时到账接口回调操作示例
Nov 14 PHP
thinkPHP订单数字提醒功能的实现方法
Dec 01 PHP
PHP中关键字interface和implements详解
Jun 14 PHP
php post json参数的传递和接收处理方法
May 31 PHP
Yii2.0实现的批量更新及批量插入功能示例
Jan 29 PHP
使用laravel的migrate创建数据表的方法
Sep 30 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 伪静态之IIS篇
2014/06/02 PHP
Yii核心验证器api详解
2016/11/23 PHP
Yii框架日志操作图文与实例详解
2019/09/09 PHP
PHP实现创建一个RPC服务操作示例
2020/02/23 PHP
Select标签下拉列表二级联动级联实例代码
2014/02/07 Javascript
借助JavaScript脚本判断浏览器Flash Player信息的方法
2014/07/09 Javascript
js返回前一页刷新本页重载页面
2014/07/29 Javascript
轻松掌握JavaScript策略模式
2016/08/25 Javascript
knockoutjs动态加载外部的file作为component中的template数据源的实现方法
2016/09/01 Javascript
Node.js Express 框架 POST方法详解
2017/01/23 Javascript
jQuery插件FusionCharts绘制的3D环饼图效果示例【附demo源码】
2017/04/02 jQuery
Angular.JS中的this指向详解
2017/05/17 Javascript
jQuery复合事件用法示例
2017/06/10 jQuery
Vue 中文本内容超出规定行数后展开收起的处理的实现方法
2019/04/28 Javascript
layui table复选框禁止某几条勾选的实例
2019/09/20 Javascript
浅析webpack-bundle-analyzer在vue-cli3中的使用
2019/10/23 Javascript
原生JavaScript实现幻灯片效果
2021/02/19 Javascript
[02:51]DOTA2 Supermajor小组分组对阵抽签仪式
2018/06/01 DOTA
python通过ssh-powershell监控windows的方法
2015/06/02 Python
python+opencv识别图片中的圆形
2020/03/25 Python
关于django 数据库迁移(migrate)应该知道的一些事
2018/05/27 Python
python opencv实现图像边缘检测
2019/04/29 Python
python判断无向图环是否存在的示例
2019/11/22 Python
python matplotlib工具栏源码探析三之添加、删除自定义工具项的案例详解
2021/02/25 Python
CSS3圆角边框和边界图片效果实例
2016/07/01 HTML / CSS
生日寿宴答谢词
2014/01/19 职场文书
公司投资建议书
2014/05/16 职场文书
个人职业及收入证明
2014/10/13 职场文书
学校党的群众路线教育实践活动个人整改方案
2014/10/31 职场文书
工伤私了协议书范本
2014/11/24 职场文书
小学优秀教师事迹材料
2014/12/16 职场文书
电影地道战观后感
2015/06/04 职场文书
个人催款函范文
2015/06/23 职场文书
幽默口才训练经典句子(48句)
2019/08/19 职场文书
如何在CocosCreator里画个炫酷的雷达图
2021/04/16 Javascript
mysqldump进行数据备份详解
2022/07/15 MySQL