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调用三种数据库的方法(2)
Oct 09 PHP
vBulletin HACK----关于排版的两个HACK
Oct 09 PHP
PHP下几种删除目录的方法总结
Aug 19 PHP
删除数组元素实用的PHP数组函数
Aug 18 PHP
php 数组动态添加实现代码(最土团购系统的价格排序)
Dec 30 PHP
解析csv数据导入mysql的方法
Jul 01 PHP
php生成excel列名超过26列大于Z时的解决方法
Dec 29 PHP
php实现图片转换成ASCII码的方法
Apr 03 PHP
PHP rsa加密解密使用方法
Apr 27 PHP
PHP的全局错误处理详解
Apr 25 PHP
PHP之十六个魔术方法详细介绍
Nov 01 PHP
PHP SESSION跨页面传递失败解决方案
Dec 11 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动态添加url查询参数的方法
2015/04/14 PHP
PHP版QQ互联OAuth示例代码分享
2015/07/05 PHP
php使用gzip压缩传输js和css文件的方法
2015/07/29 PHP
示例详解Laravel的注册重构
2016/08/14 PHP
php_pdo 预处理语句详解
2016/11/21 PHP
推荐:极酷右键菜单
2006/11/29 Javascript
js 替换
2008/02/19 Javascript
js函数内变量的作用域分析
2015/01/12 Javascript
jQuery判断对象是否存在的方法
2015/02/05 Javascript
JS实现两表格里数据来回转移的方法
2015/05/28 Javascript
jQuery简单创建节点的方法
2016/09/09 Javascript
简易的JS计算器实现代码
2016/10/18 Javascript
100行代码理解和分析vue2.0响应式架构
2017/03/09 Javascript
JavaScript异步上传图片文件的实例代码
2017/07/04 Javascript
js实现日期显示的一些操作(实例讲解)
2017/07/27 Javascript
jQuery响应滚动条事件功能示例
2017/10/14 jQuery
vue-cli项目根据线上环境分别打出测试包和生产包
2018/05/23 Javascript
原生js实现二级联动菜单
2019/11/27 Javascript
[01:09:16]DOTA2-DPC中国联赛 正赛 SAG vs Dynasty BO3 第一场 1月25日
2021/03/11 DOTA
Python fileinput模块使用实例
2015/05/28 Python
在Django中同时使用多个配置文件的方法
2015/07/22 Python
Pycharm编辑器技巧之自动导入模块详解
2017/07/18 Python
解决vscode python print 输出窗口中文乱码的问题
2018/12/03 Python
Python字典的基本用法实例分析【创建、增加、获取、修改、删除】
2019/03/05 Python
python数据爬下来保存的位置
2020/02/17 Python
tensorflow dataset.shuffle、dataset.batch、dataset.repeat顺序区别详解
2020/06/03 Python
Python如何将装饰器定义为类
2020/07/30 Python
如何用Python 加密文件
2020/09/10 Python
python如何实现word批量转HTML
2020/09/30 Python
HTML5实现视频弹幕功能
2019/08/09 HTML / CSS
吉尔德利巧克力公司:Ghirardelli Chocolate Company
2019/03/27 全球购物
大学新闻系自荐书
2014/05/31 职场文书
中专毕业生的自荐书
2014/07/01 职场文书
《落花生》教学反思
2016/02/16 职场文书
Javascript使用integrity属性进行安全验证
2021/11/07 Javascript
Element-ui Layout布局(Row和Col组件)的实现
2021/12/06 Vue.js