PHP 插入时间戳进mysql数据库问题

1.之前做了一个登录检测的功能,就是每次用户登录会记录用户登录时间和在线时常。最近测试发现数据混乱,登录时间是对的,但是退出时间不对。经过排查,是apache2服务器崩了,所以重启了apache2服务器,时间就正常了。

2.在解决问题的过程中,整理一下,如何正常使用这个时间,虽然apache2   系统 和 mysql里的时间之间的关系不太清楚。但是知道的是,mysql时间是根据系统(linux)来获取的,现在我们来看一下:

(1) 首先设置好linux服务器的时区和时间:用date命令看一下:

Wed Oct 21 15:26:17 CST 2015   发现是CST,这个是中国标准时间(China Standard Time)    有的可能是EDT( 美国东部夏季时间)  这个就要进行修改:

方法如下:(网上摘抄的感谢作者)

linux系统修改CST时区:
=================================================

初始时间:2012年 09月 14日 星期五 18:15:33 EDT
[root@test ~]# mv /etc/localtime /etc/localtime.bak
[root@test ~]# ln -s/usr/share/zoneinfo/Asia/Shanghai  /etc/localtime
[root@test ~]# date
修改后的时间:
2012年 09月 15日 星期六 18:25:00 CST

(2)修改完成后,重启apahce2服务器,让修改的时间也在apache2中生效。因为插入时间进数据库的时候我们利用了date函数来获取时间,而php获取的时间就是apache的时间

(3)  重启mysql服务器。

我们已经说了mysql服务器里边的时间根据linux系统时间来判断的,我们可以用show variables like "%time_zone";语句来看一下:

如下:

+------------------+--------+
| Variable_name    | Value  |
+------------------+--------+
| system_time_zone | CST    |
| time_zone        |     SYSTEM |
+------------------+--------+

我们可以看到系统的时区是CST和linux系统的时间是一样的,mysql当前的时区 显示为SYSTEM 也就是和服务器的时区是一样的,也是linux下的。这样就做到了一致。

如果修改了time_zone字段,会影响到select now(); 若使用上述默认的SYSTEM时区 ,我们在数据库里select now();时间就是linux服务器下date命令后的时间。

若是用SQL命令 把time_zone设置为 set time_zone = "+8:00"或者其他的 则select now();会在linux服务器date命令下的时间的基础上进行+8个小时操作。


注意:PHP中date方法中可以由参数设置是12小时制还是24小时制,date('Y-m-d H:i:s',time());

  • h - 带有首位零的 12 小时小时格式
  • H   是表示24小时格式
  • i - 带有首位零的分钟
  • s - 带有首位零的秒(00 -59)
  • a - 小写的午前和午后(am 或 pm)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值