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 相关文章推荐
Apache2 httpd.conf 中文版
Dec 06 PHP
在任意字符集下正常显示网页的方法一
Apr 01 PHP
PHP 身份验证方面的函数
Oct 11 PHP
THINKPHP+JS实现缩放图片式截图的实现
Mar 07 PHP
zf框架的zend_cache缓存使用方法(zend框架)
Mar 14 PHP
PHP轻量级数据库操作类Medoo增加、删除、修改、查询例子
Jul 04 PHP
php实现监控varnish缓存服务器的状态
Dec 30 PHP
php使用数组填充下拉列表框的方法
Mar 31 PHP
php实现源代码加密的方法
Jul 11 PHP
Thinkphp微信公众号支付接口
Aug 04 PHP
教你在header中隐藏php的版本信息
Aug 10 PHP
Laravel实现autoload方法详解
May 07 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
超外差式晶体管收音机的组装与统调
2021/03/01 无线电
php curl 登录163邮箱并抓取邮箱好友列表的代码(经测试)
2011/04/07 PHP
PHP操作数组的一些函数整理介绍
2011/07/17 PHP
PHP的foreach中使用引用时需要注意的一个问题和解决方法
2014/05/29 PHP
PHP采集类Snoopy抓取图片实例
2014/06/19 PHP
PHP将session信息存储到数据库的类实例
2015/03/04 PHP
php post大量数据时发现数据丢失问题解决方法
2015/06/20 PHP
PHP 中使用explode()函数切割字符串为数组的示例
2017/05/06 PHP
PHP回调函数与匿名函数实例详解
2017/08/16 PHP
Nigma vs Liquid BO3 第一场2.13
2021/03/10 DOTA
Javascript操纵Cookie实现购物车程序
2006/11/23 Javascript
javascript之水平横向滚动歌词同步的应用
2007/05/07 Javascript
javascript 基础篇3 类,回调函数,内置对象,事件处理
2012/03/14 Javascript
js判读浏览器是否支持html5的canvas的代码
2013/11/18 Javascript
利用javascript打开模态对话框(示例代码)
2014/01/11 Javascript
JS获取屏幕高度的简单实现代码
2016/05/24 Javascript
Angularjs手动解析表达式($parse)
2016/10/12 Javascript
让微信小程序支持ES6中Promise特性的方法详解
2017/06/13 Javascript
jQuery 获取除某指定对象外的其他对象 ( :not() 与.not())
2018/10/10 jQuery
微信小程序学习笔记之表单提交与PHP后台数据交互处理图文详解
2019/03/28 Javascript
在Express中提供静态文件的实现方法
2019/10/17 Javascript
简单了解JavaScript arguement原理及作用
2020/05/28 Javascript
vue实现抽屉弹窗效果
2020/11/15 Javascript
js实现弹窗猜数字游戏
2020/11/26 Javascript
[02:49:21]2019完美盛典全程录像
2019/12/08 DOTA
Python自定义函数的创建、调用和函数的参数详解
2014/03/11 Python
在PyCharm环境中使用Jupyter Notebook的两种方法总结
2018/05/24 Python
Django基础三之视图函数的使用方法
2019/07/18 Python
django最快程序开发流程详解
2019/07/19 Python
django 中的聚合函数,分组函数,F 查询,Q查询
2019/07/25 Python
全球性的在线购物网站:Zapals
2017/03/22 全球购物
雷曼兄弟的五金店:Lehman’s Hardware Store
2019/04/10 全球购物
忠诚教育心得体会
2014/09/03 职场文书
python控制台打印log输出重复的解决方法
2021/05/14 Python
java如何实现socket连接方法封装
2021/09/25 Java/Android
Java字符串逆序方法详情
2022/03/21 Java/Android