@ZEAL Blog·厉
We stand alone,
TOGETHER.

MySQL UNIX_TIMESTAMP到PHP date

Posted by zeal on 2006-02-28 11:49 , 757 characters |  + 0 - 0   English
转载请保留本行原始出处声明信息 : http://www.zeali.net/entry/334 MaDe1nZEAL
标签 ( PHP ):  ,  ,  , 

通过 UNIX_TIMESTAMP 函数把 MySQL 数据库中的 date 类型数据转换成 unix timestamp 形式的一个整形数字:

select UNIX_TIMESTAMP('2006-02-28') testdate;

按理说得到的时间戳应该可以直接拿来给 PHP 的 date() 等函数使用。但奇怪的是:

echo date("Y-m-d",$testdate);

显示出来的日期跟数据库实际的日期相比却少了一天,百思不得其解。反复查看 MySQL 关于 UNIX_TIMESTAMP 函数的说明,终于发现问题所在:“The server interprets date as a value in the current time zone and converts it to an internal value in UTC.” 原来 MySQL 的 UNIX_TIMESTAMP 函数得到的时间戳是 UTC 时间,而不是服务器设定的特定 Time zone 的时间。经过这样一转化,时间戳就凭空少了8个小时(对于咱这里来说),而 PHP 中的 timestamp 则计算的都是系统设定时区的当地时间。因此 2006-02-28 这个日期被减去了8个小时,自然变成了2006-02-27。

解决方法:把这八个小时加回去(UNIX_TIMESTAMP('2006-02-28' + INTERVAL 8 HOUR));或者弃用 UNIX_TIMESTAMP 函数, 直接得到 MySQL date 字符串之后通过 strtotime() 函数来把字符串转化成真正的本地时间戳。

Last Modified on 2007-05-28 12:08
没有评论.
Since 2005.04.27  梦想 就像鸡蛋 要么孵化 要么臭掉RSS Feed (Entries) | Back To Home | @ZEAL | 沪ICP备05024379号