有个困惑。
想要保存的日期是js new Date()出来的。 数据库里的字段是datetime类型,如果直接parseInt((new Date()).getTime()/1000,10) 插入,会提示类型错误。但如果只是插入'2014-04-07 18:00:00'的话 貌似会丢失时区信息。
当服务器从数据库里取出来的时候,就会自动转成东八区,时间向前了+0800 8小时。
哪位能科普一下~。如何能使得datetime类型带上时区信息?
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
mysql 的时区应该与插入的数据无关,时区信息是 mysql 的系统变量,查看 mysql 的系统变量可以直接 run:
在
Variable_name
一列可以找到值为time_zone
的记录,它的值就是当前 mysql 的时区信息,默认值为SYSTEM
,即服务器的时区。你也可以通过以下语句来查看当前的时间信息:结果为
2014-04-07 21:02:44
,即时区为GMT+0800,东八区,北京时间。如果需要修改默认的时区信息,可以 run:
这时再 run :
结果为
2014-04-07 22:04:11
。此时显示的已经是东京时间了,默认时区信息更改成功,或者你也可以查看此时time_zone
的值,此时值应该为+09:00
。你确定datetime 类型 MySQL 会自动做时区处理么。我记得是和时区无关的,你插入是什么,读出来就是什么
问题八成出在你插入的时候就直接插的是UTC,读出来也是UTC
另外东八区是+0800,不是往前加,是往后加。UTC转东八区是+8h,而不是往前+8h。。。没有往前+的说法,只有-
给你个建议吧,凡是涉及到datetime的一律保存为unix timestamp,用bigint存毫秒或者real存秒,没有时区转换的问题,显示的时候用指定时区转换出字符串