[实践OK]Mysql用timestamp存时间建立索引用PHP去查询时间比较,在PHP中怎么将date()函数转换为unix时间戳?
在项目中经常会在某个时候停止某个功能,这儿写一下作为备份:
int mktime ([ int $hour = date("H") [, int $minute = date("i") [, int $second = date("s") [, int $month = date("n") [, int $day = date("j") [, int $year = date("Y") [, int $is_dst = -1 ]]]]]]] )
Returns the Unix timestamp corresponding to the arguments given. This timestamp is a long integer containing the number of seconds between the Unix Epoch (January 1 1970 00:00:00 GMT) and the time specified.
Arguments may be left out in order from right to left; any arguments thus omitted will be set to the current value according to the local date and time.
$nowDate=mktime(date('H'),date('i'),date('s'),date('m'),date('d'),date('Y'));
$forbidden_end = mktime(23,59,59,3,31,2010);//结束时间
if($nowDate >= $forbidden_end)
{
$content = json_encode ( array ("code" => -1, "message" => "温馨提示:**活动已经结束,谢谢你的参与!"));
return $content;
}
一)date函数是将timestamp 转化成特定格式日期的.
二)需要获取时间戳 用time函数可以获得当前时间的timestamp
用strtotime(格式)可以获取指定时间的时间戳:
日期转换为UNIX时间戳用函数:strtotime()
一般形式:strtotime('2010-03-24 08:15:42');
关于Mysql时间字段格式如何选择,TIMESTAMP,DATETIME,INT?以下摘自:http://segmentfault.com/q/1010000000121702
首先 DATETIM和TIMESTAMP类型所占的存储空间不同,前者8个字节,后者4个字节,这样造成的后果是两者能表示的时间范围不同。前者范围为1000-01-01 00:00:00 ~ 9999-12-31 23:59:59,后者范围为1970-01-01 08:00:01到2038-01-19 11:14:07。所以可以看到TIMESTAMP支持的范围比DATATIME要小,容易出现超出的情况.
其次,TIMESTAMP类型在默认情况下,insert、update 数据时,TIMESTAMP列会自动以当前时间(CURRENT_TIMESTAMP)填充/更新。
第三,TIMESTAMP比较受时区timezone的影响以及MYSQL版本和服务器的SQL MODE的影响
所以一般来说,我比较倾向选择DATETIME,至于你说到索引的问题,选择DATETIME作为索引,如果碰到大量数据查询慢的情况,也可以分区表解决。
______________________________________________________________________________________________________________________________________________________________________
其实速度上差别不是很大,你可以自己做做测试就知道了。内部存储都是整数,只不过datetime和timestamp会仅仅在显示的时候,显示为人能读的日期(当然存储空间有点区别,整形和timestamp都是4字节,datetime是8字节),做索引也应该没什么区别,这个不敢确定,如果有请指正我……
另外datetime和timestamp相对于int来说也有一个小小的好处,就是对于时间类型来说,可以有一系列的时间函数可以用
这几个类型的选择还是看你的需求。
我用timestamp比较多,对于记录日志什么的需求,timestamp绝对够用了,除非你保证说你的程序能一直用到2038年,就算如此也可以用迁移程序处理……
如果需求是允许用户保存一些超过timestamp能保存的时间(@QingchaoWu 已经给出了timestamp的范围)比如说todo list什么的,允许用户计划38年以后的事情,那就用datetime好了。
______________________________________________________________________________________________________________________________________________________________________
还是喜欢INT存时间戳。占用资源少,查询速度快。条件范围搜索使用between没什么问题。查询条件自由拼接。用int还是比较好的。使用其他字段类型貌似MySQL内部还会进行一次转换,时间格式的比对不是特别青睐。
一般我使用INT格式,灵活些
如果你要在表示时间字段上建立索引,那么使用INT索引效率要高
int mktime ([ int $hour = date("H") [, int $minute = date("i") [, int $second = date("s") [, int $month = date("n") [, int $day = date("j") [, int $year = date("Y") [, int $is_dst = -1 ]]]]]]] )
Returns the Unix timestamp corresponding to the arguments given. This timestamp is a long integer containing the number of seconds between the Unix Epoch (January 1 1970 00:00:00 GMT) and the time specified.
Arguments may be left out in order from right to left; any arguments thus omitted will be set to the current value according to the local date and time.
$nowDate=mktime(date('H'),date('i'),date('s'),date('m'),date('d'),date('Y'));
$forbidden_end = mktime(23,59,59,3,31,2010);//结束时间
if($nowDate >= $forbidden_end)
{
$content = json_encode ( array ("code" => -1, "message" => "温馨提示:**活动已经结束,谢谢你的参与!"));
return $content;
}
一)date函数是将timestamp 转化成特定格式日期的.
二)需要获取时间戳 用time函数可以获得当前时间的timestamp
用strtotime(格式)可以获取指定时间的时间戳:
日期转换为UNIX时间戳用函数:strtotime()
一般形式:strtotime('2010-03-24 08:15:42');
关于Mysql时间字段格式如何选择,TIMESTAMP,DATETIME,INT?以下摘自:http://segmentfault.com/q/1010000000121702
首先 DATETIM和TIMESTAMP类型所占的存储空间不同,前者8个字节,后者4个字节,这样造成的后果是两者能表示的时间范围不同。前者范围为1000-01-01 00:00:00 ~ 9999-12-31 23:59:59,后者范围为1970-01-01 08:00:01到2038-01-19 11:14:07。所以可以看到TIMESTAMP支持的范围比DATATIME要小,容易出现超出的情况.
其次,TIMESTAMP类型在默认情况下,insert、update 数据时,TIMESTAMP列会自动以当前时间(CURRENT_TIMESTAMP)填充/更新。
第三,TIMESTAMP比较受时区timezone的影响以及MYSQL版本和服务器的SQL MODE的影响
所以一般来说,我比较倾向选择DATETIME,至于你说到索引的问题,选择DATETIME作为索引,如果碰到大量数据查询慢的情况,也可以分区表解决。
______________________________________________________________________________________________________________________________________________________________________
其实速度上差别不是很大,你可以自己做做测试就知道了。内部存储都是整数,只不过datetime和timestamp会仅仅在显示的时候,显示为人能读的日期(当然存储空间有点区别,整形和timestamp都是4字节,datetime是8字节),做索引也应该没什么区别,这个不敢确定,如果有请指正我……
另外datetime和timestamp相对于int来说也有一个小小的好处,就是对于时间类型来说,可以有一系列的时间函数可以用
这几个类型的选择还是看你的需求。
我用timestamp比较多,对于记录日志什么的需求,timestamp绝对够用了,除非你保证说你的程序能一直用到2038年,就算如此也可以用迁移程序处理……
如果需求是允许用户保存一些超过timestamp能保存的时间(@QingchaoWu 已经给出了timestamp的范围)比如说todo list什么的,允许用户计划38年以后的事情,那就用datetime好了。
______________________________________________________________________________________________________________________________________________________________________
还是喜欢INT存时间戳。占用资源少,查询速度快。条件范围搜索使用between没什么问题。查询条件自由拼接。用int还是比较好的。使用其他字段类型貌似MySQL内部还会进行一次转换,时间格式的比对不是特别青睐。
一般我使用INT格式,灵活些
如果你要在表示时间字段上建立索引,那么使用INT索引效率要高
作者:jackxiang@向东博客 专注WEB应用 构架之美 --- 构架之美,在于尽态极妍 | 应用之美,在于药到病除
地址:http://jackxiang.com/post/2877/
版权所有。转载时必须以链接形式注明作者和原始出处及本声明!
最后编辑: jackxiang 编辑于2015-9-28 15:28
评论列表