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 相关文章推荐
Joomla下利用configuration.php存储简单数据
May 19 PHP
php.ini中date.timezone设置分析
Jul 29 PHP
解析PHP处理换行符的问题 \r\n
Jun 13 PHP
浅析PHP substr,mb_substr以及mb_strcut的区别和用法
Jun 21 PHP
PHP set_error_handler()函数使用详解(示例)
Nov 12 PHP
php对象在内存中的存在形式分析
Feb 03 PHP
php实现可逆加密的方法
Aug 11 PHP
Symfony控制层深入详解
Mar 17 PHP
详解PHP实现定时任务的五种方法
Jul 25 PHP
PHP实现生成模糊图片的方法示例
Dec 21 PHP
浅谈php使用curl模拟多线程发送请求
Mar 08 PHP
php高性能日志系统 seaslog 的安装与使用方法分析
Feb 29 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多文件上传下载示例分享
2014/02/20 PHP
php str_replace替换指定次数的方法详解
2017/05/05 PHP
xmlHTTP实例
2006/10/24 Javascript
JavaScript 基于原型的对象(创建、调用)
2009/10/16 Javascript
node.js实现多图片上传实例
2014/06/03 Javascript
最简单的tab切换实例代码
2016/05/13 Javascript
js canvas仿支付宝芝麻信用分仪表盘
2016/11/16 Javascript
Vuex 入门教程
2018/01/10 Javascript
React Native悬浮按钮组件的示例代码
2018/04/05 Javascript
微信小程序实现文字跑马灯
2020/05/26 Javascript
vue实现滑动切换效果(仅在手机模式下可用)
2020/06/29 Javascript
vue登录以及权限验证相关的实现
2019/10/25 Javascript
JavaScript实现京东放大镜效果
2019/12/03 Javascript
简单了解Vue + ElementUI后台管理模板
2020/04/07 Javascript
javascript实现随机抽奖功能
2020/12/30 Javascript
[00:20]DOTA2荣耀之路7:-ah fu-抢盾
2018/05/31 DOTA
基于Python代码编辑器的选用(详解)
2017/09/13 Python
Python爬取十篇新闻统计TF-IDF
2018/01/03 Python
python使用生成器实现可迭代对象
2018/03/20 Python
Python3.5 + sklearn利用SVM自动识别字母验证码方法示例
2019/05/10 Python
libreoffice python 操作word及excel文档的方法
2019/07/04 Python
详细介绍Python进度条tqdm的使用
2019/07/31 Python
Python Web框架之Django框架文件上传功能详解
2019/08/16 Python
基于Python实现签到脚本过程解析
2019/10/25 Python
Pytorch.nn.conv2d 过程验证方式(单,多通道卷积过程)
2020/01/03 Python
Ubuntu配置Pytorch on Graph (PoG)环境过程图解
2020/11/19 Python
HTML5 MiranaVideo播放器 (代码开源)
2010/06/11 HTML / CSS
美国大型的健身社区和补充商店:Bodybuilding.com
2016/09/06 全球购物
实习鉴定范文
2013/12/19 职场文书
小学生环保倡议书
2014/05/15 职场文书
党员十八大心得体会
2014/09/12 职场文书
授权委托书(法人单位用)
2014/09/29 职场文书
先进典型发言材料
2014/12/30 职场文书
百年校庆宣传标语口号
2015/12/26 职场文书
解决Pytorch半精度浮点型网络训练的问题
2021/05/24 Python
php解析非标准json、非规范json的方式实例
2022/05/10 PHP