php utc时间_PHP跨时区(UTC时间)应用解决方案_php技巧

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中文网,转载请注明出处,感谢您的尊重!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值