Discuz!官方免费开源建站系统

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

[疑问] 1970-1-1问题原因分析及解决方案

[复制链接]
sdaupp 发表于 2007-7-2 16:05:10 | 显示全部楼层 |阅读模式
最近经常看到网友说“为什么我的论坛数据转换后,许多用户注册日期都成了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,一个很吉祥的日子哦~~~。
如果你想改成别的时间,可以用以下程序进行转换。

  1. <?
  2. $strtime = "2004-1-1 16:23:45";

  3. $array = explode("-",$strtime);
  4. $year = $array[0];
  5. $month = $array[1];

  6. $array = explode(":",$array[2]);
  7. $minute = $array[1];
  8. $second = $array[2];

  9. $array = explode(" ",$array[0]);
  10. $day = $array[0];
  11. $hour = $array[1];

  12. $timestamp = mktime($hour,$minute,$second,$month,$day,$year);

  13. echo "字符串时间:$strtime<br>";
  14. echo "年:$year<br>";
  15. echo "月:$month<br>";
  16. echo "日:$day<br>";
  17. echo "时:$hour<br>";
  18. echo "分:$minute<br>";
  19. echo "秒:$second<br>";
  20. echo "转换为timestamp:" . $timestamp . "<br>";
  21. echo "从timestamp转换回来:" . date("Y-m-d H:i:s",$timestamp) . "<br>";
  22. echo "<p>===获取当前时间线===<br>";
  23. $timestamp=time();
  24. $timeoffset =8;
  25. $member = gmdate('Y-n-j H:i:s', $timestamp + $timeoffset * 3600 );
  26. echo "<br>现在时间是:".$member."<br>";
  27. echo "时间片:".$timestamp;
  28. echo "<p>===任意时间线转换===<br>";
  29. echo "1149091200<br>";
  30. $timestamp='1149091200';
  31. $timeoffset =8;
  32. $member = gmdate('Y-n-j H:i:s', $timestamp + $timeoffset * 3600 );

  33. echo "转换结果:<br>".$member;
  34. ?>
复制代码

以上方案也适用于所有出现“1970-1-1”问题的其他字段,只不过表名、字段名需要改变一下……
 楼主| sdaupp 发表于 2007-7-3 18:24:06 | 显示全部楼层
没人感兴趣啊……晕!
回复

使用道具 举报

Arice 发表于 2007-7-4 08:35:50 | 显示全部楼层
可以使用 strtotime() 吧.
回复

使用道具 举报

 楼主| sdaupp 发表于 2007-7-5 00:46:32 | 显示全部楼层
领教领教……我没注意到这个函数。
如此,这段代码可以简化为:
  1. <?
  2. $stamp=strtotime('2007-7-5');
  3. echo $stamp;
  4. $timeoffset =8;
  5. $member = gmdate('Y-n-j H:i:s', $stamp + $timeoffset * 3600 );
  6. echo $member;
  7. ?>
复制代码

只是不能显示中文年月日,效果一样,呵呵
回复

使用道具 举报

fhj1998 发表于 2007-7-5 18:34:38 | 显示全部楼层
Discuz! 数据结构成功升级,影响的记录行数 4,请返回。


[ 点击这里返回上一页 ]

赞!谢谢兄弟了。

完事后,time.php要删的吧
回复

使用道具 举报

 楼主| sdaupp 发表于 2007-7-7 01:28:50 | 显示全部楼层
没关系,那只是一个计算程序,并不牵涉到数据库。。。留着当个工具使用吧。
回复

使用道具 举报

Discuz8.0 发表于 2007-9-8 06:26:40 | 显示全部楼层
UPDATE `cdb_members` SET `lastvisit` = '1189180800' WHERE `cdb_members`.`lastvisit` ='' ;
回复

使用道具 举报

叼着烟吻@你 发表于 2007-9-22 16:54:35 | 显示全部楼层
我在升级UPDATE `cdb_members` SET `regdate` = '1182154498' WHERE `cdb_members`.`regdate` ='' ;

跳出的是Discuz! 数据结构成功升级,影响的记录行数 0,请返回。

这样算问题解决了吗
回复

使用道具 举报

叼着烟吻@你 发表于 2007-9-22 17:05:02 | 显示全部楼层
我弄了可是我的上次访问时间还是1970年
回复

使用道具 举报

hnjylqq 发表于 2008-1-1 11:57:31 | 显示全部楼层
问题没有解决啊
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|Discuz! 官方站 ( 皖ICP备16010102号 )star

GMT+8, 2024-10-3 12:31 , Processed in 0.134186 second(s), 16 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表