最近经常看到网友说“为什么我的论坛数据转换后,许多用户注册日期都成了1970-1-1 08:00?”。
根据我的研究,出现“1970-01-01”的原因是:
数据表 cdb_members 中regdate 字段为空!这一般是由于数据库导入、不同论坛之间进行数据转换时因为字段数据格式不同造成的。
因为DZ是按格林威治标准时间片格式存贮的,所以当该字段为空时,计算机会自动给出他自已的生日,就是“1970-01-01”……
(这可能也是一个未解决好的“千年”问题吧~~)。
修正的方法:
进入后台-系统工具-数据库升级,执行以下SQL语句:
UPDATE `cdb_members` SET `regdate` = '1182154498' WHERE `cdb_members`.`regdate` ='' ;
上面这个'1182154498'是我随便加的,换算成日历时间就是2007-6-18,一个很吉祥的日子哦~~~。
如果你想改成别的时间,可以用以下程序进行转换。
- <?
- $strtime = "2004-1-1 16:23:45";
- $array = explode("-",$strtime);
- $year = $array[0];
- $month = $array[1];
- $array = explode(":",$array[2]);
- $minute = $array[1];
- $second = $array[2];
- $array = explode(" ",$array[0]);
- $day = $array[0];
- $hour = $array[1];
- $timestamp = mktime($hour,$minute,$second,$month,$day,$year);
- echo "字符串时间:$strtime<br>";
- echo "年:$year<br>";
- echo "月:$month<br>";
- echo "日:$day<br>";
- echo "时:$hour<br>";
- echo "分:$minute<br>";
- echo "秒:$second<br>";
- echo "转换为timestamp:" . $timestamp . "<br>";
- echo "从timestamp转换回来:" . date("Y-m-d H:i:s",$timestamp) . "<br>";
- echo "<p>===获取当前时间线===<br>";
- $timestamp=time();
- $timeoffset =8;
- $member = gmdate('Y-n-j H:i:s', $timestamp + $timeoffset * 3600 );
- echo "<br>现在时间是:".$member."<br>";
- echo "时间片:".$timestamp;
- echo "<p>===任意时间线转换===<br>";
- echo "1149091200<br>";
- $timestamp='1149091200';
- $timeoffset =8;
- $member = gmdate('Y-n-j H:i:s', $timestamp + $timeoffset * 3600 );
- echo "转换结果:<br>".$member;
- ?>
复制代码
以上方案也适用于所有出现“1970-1-1”问题的其他字段,只不过表名、字段名需要改变一下…… |