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 Memcached应用实现代码
Feb 08 PHP
php和mysql中uft-8中文编码乱码的几种解决办法
Apr 19 PHP
php删除文件夹及其文件夹下所有文件的函数代码
Jan 23 PHP
php 深入理解strtotime函数的使用详解
May 23 PHP
探讨PHP调用时间格式的参数详解
Jun 06 PHP
浅析PHP的静态成员函数效率更高的原因
Jun 13 PHP
Discuz7.2版的faq.php SQL注入漏洞分析
Aug 06 PHP
PHP模块memcached使用指南
Dec 08 PHP
PHP中substr函数字符串截取用法分析
Jan 07 PHP
php自定义扩展名获取函数示例
Dec 12 PHP
php查找字符串中第一个非0的位置截取
Feb 27 PHP
YII2框架中添加自定义模块的方法实例分析
Mar 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
详细介绍:Apache+PHP+MySQL配置攻略
2006/09/05 PHP
浅析使用Turck-mmcache编译来加速、优化PHP代码
2013/06/20 PHP
关于php支持分块与断点续传文件下载功能代码
2014/05/09 PHP
php通过递归方式复制目录和子目录的方法
2015/03/13 PHP
PHP实现仿Google分页效果的分页函数
2015/07/29 PHP
PHP自定义函数实现格式化秒的方法
2016/09/14 PHP
实现PHP搜索加分页
2016/10/12 PHP
phpStudy中升级MySQL版本到5.7.17的方法步骤
2017/08/03 PHP
javascript修改表格背景色实例代码分享
2013/12/10 Javascript
TypeScript 中接口详解
2015/06/19 Javascript
jquery判断复选框选中状态以及区分attr和prop
2015/12/18 Javascript
基于jQuery和CSS3制作响应式水平时间轴附源码下载
2015/12/20 Javascript
JS简单获取日期相差天数的方法
2017/04/24 Javascript
全面解析vue router 基本使用(动态路由,嵌套路由)
2018/09/02 Javascript
vue和小程序项目中使用iconfont的方法
2020/05/19 Javascript
Python中使用Boolean操作符做真值测试实例
2015/01/30 Python
初步介绍Python中的pydoc模块和distutils模块
2015/04/13 Python
Django中针对基于类的视图添加csrf_exempt实例代码
2018/02/11 Python
python实现类之间的方法互相调用
2018/04/29 Python
python爬虫实例详解
2018/06/19 Python
有关Python的22个编程技巧
2018/08/29 Python
用Pytorch训练CNN(数据集MNIST,使用GPU的方法)
2019/08/19 Python
python多任务之协程的使用详解
2019/08/26 Python
Python return语句如何实现结果返回调用
2020/10/15 Python
Manjaro、pip、conda更换国内源的方法
2020/11/17 Python
比较一下entity bean和session bean
2013/12/27 面试题
工作自荐信
2013/12/11 职场文书
小学国庆节活动方案
2014/02/11 职场文书
《争吵》教学反思
2014/02/15 职场文书
县长群众路线对照检查材料思想汇报
2014/10/02 职场文书
工作失误检讨书(经典集锦版)
2014/10/17 职场文书
入党积极分子十八届四中全会思想汇报
2014/10/23 职场文书
单位租车协议书
2015/01/29 职场文书
2015年服务员个人工作总结
2015/05/27 职场文书
2016年保险公众宣传日活动总结
2016/04/05 职场文书
MySQL 执行数据库更新update操作的时候数据库卡死了
2022/05/02 MySQL