ECSHOP时区问题,php时间戳转换差8小时问题
(2012-08-29 09:24:58)
标签:
杂谈
查看原文:http://www.easyhoo.cn/blog/index.php/ecshop_shi_qu_wen_ti_php_shi_jian_chuo_zhuan_huan_cha_8_xiao_shi_wen_ti/
ecshop直接保存日期然后通过date()将时间戳转时年月日,会存在一个8小时误差问题,后台有设置时间,正常不二次开发时间显示都经过处理,不会出问题.
由于自己写了PHP代码需要调用日期,直接读取的时期则少了8小时,早上8点前记录的时间将全部归到前一天的日期上.
解决方法: date('Y-m-d',$row['add_time']) 换成
local_date('Y-m-d',+$row['add_time']); 可以是ECSHOP的统一设定时间格式:
local_date($GLOBALS['_CFG']['date_format'],+$row['add_time']);
以下网上搜索资料,扩展阅读:
PHP时间大的来分有两种,一是时间戳类型(1228348800),二是正常日期格式(2008-12-4)
所以存到数据库也有两种形式了(真正不止,我的应用就两种),时间戳类型我是保存为字符串的,这个是比较方便的.
正常日期类型是保存为DATE型的.
这两个要注意一下,我平时用两种,所以,前几天建的表,把时间类型存为DATE的,我还一直用时间戳保存,一直资料写不进表,调试了好久的才知错误之处,是类型不符合,不给写入库.
像上面的时间戳是比较方便,但,显示的时候,不至于把这个1228348800串给客户看吧,GOD+NOWS!
所+以就用到了这两个的转换,先说一下如何取得当前的时间戳,$date1=time();这样就取得当前的时间戳了,要转回2008-12-4这种格式呢,+用到date()这个函数了,在PHP中date()函数比较常用,如取得当前日期,可以用$date2=date('Y-m-d');,关于里面参数的+意思,如不懂就查一下php的手册了.
好,言归正传,把1228348800转成2008-12-4格式代码如下:
$date3=date('Y-m-d+H:i:s',"1228348800");
这样就OK了,如还想得到小时,分钟秒,只要把'Y-m-d'改一下就可以了,不过要注意一下,PHP时间还像有8个小时的误差.加上就OK了.
时间戳转正常日期有了,反之呢,把正常日期格式转为时间戳呢,请看如下代码:
$year=((int)substr("2008-12-04",0,4));//取得年份
$month=((int)substr("2008-12-04",5,2));//取得月份
$day=((int)substr("2008-12-04",8,2));//取得几号
echo+mktime(0,0,0,$month,$day,$year); 这样就能把正常日期转成时间戳了,这里如果有时分秒也是同理,
注意:php5.1以上时间戳会与实际时间相差8小时,解决办法如下
1、最简单的方法就是不要用php5.1以上的版本--显然这是不可取的方法!!!
2、修改php.ini。打开php.ini查找date.timezone+去掉前面的分号=+后面加Asia/Shanghai,重启apache服务器即可--缺点就是如果程序
放到别人的服务器上,不能修改php.ini,那就奈何不得了。
3、在程序中添加时间的初始化的语句的+即:“date_default_timezone_set("Asia/Shanghai");+”这个可以由程序员任意设置,我的推
荐。
时区标识符,大陆内地可用的值是:PRC,Asia/Chongqing+,Asia/Shanghai+,Asia/Urumqi+(依次为中国,重庆,上海,乌鲁木齐)+,Etc/GMT-8,Asia/Harbin
港台地区可用:Asia/Macao+,Asia/Hong_Kong+,Asia/Taipei+(依次为澳门,香港,台北)
还有新加坡:Asia/Singapore 澳大利亚:Australia/Sydney
分享:
喜欢
0
赠金笔
加载中,请稍候......
评论加载中,请稍候...
发评论
登录名: 密码: 找回密码 注册记住登录状态
昵 称:
评论并转载此博文
发评论
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。