php mysql日期比较总结

mysql有主要的内建函数如下:

 

1
2
3
4
5
6
7
8
9
NOW()	返回当前的日期和时间
CURDATE() 返回当前的日期
CURTIME() 返回当前的时间
DATE() 提取日期或日期/时间表达式的日期部分
EXTRACT() 返回日期/时间按的单独部分
DATE_ADD() 给日期添加指定的时间间隔
DATE_SUB() 从日期减去指定的时间间隔
DATEDIFF() 返回两个日期之间的天数
DATE_FORMAT() 用不同的格式显示日期/时间

 

还包括一些返回日期的各个部分函数:

选取日期时间的各个部分:日期、时间、年、季度、月、日、小时、分钟、秒、微秒

1
2
3
4
5
6
7
8
9
10
11
12
13
set @dt = '2008-09-10 07:15:30.123456';

select date(@dt); -- 2008-09-10
select time(@dt); -- 07:15:30.123456
select year(@dt); -- 2008
select quarter(@dt); -- 3
select month(@dt); -- 9
select week(@dt); -- 36
select day(@dt); -- 10
select hour(@dt); -- 7
select minute(@dt); -- 15
select second(@dt); -- 30
select microsecond(@dt); -- 123456

 

1
2
3
4
5
6
7
8
9
10
11
12
13
set @dt = '2008-09-10 07:15:30.123456';

select date(@dt); -- 2008-09-10
select time(@dt); -- 07:15:30.123456
select year(@dt); -- 2008
select quarter(@dt); -- 3
select month(@dt); -- 9
select week(@dt); -- 36
select day(@dt); -- 10
select hour(@dt); -- 7
select minute(@dt); -- 15
select second(@dt); -- 30
select microsecond(@dt); -- 123456

 

这些函数对日期的比较有很大的帮助,很多新手在处理日期函数的时候不太会处理,容易出错,下面举个例子吧:

假如有个表product有个字段add_time,它的数据类型为datetime,有人可能会这样写sql:

1
select * from product where add_time = '2013-01-12'

 

对于这种语句,如果你存储的格式是YY-mm-dd是这样的,那么OK,如果你存储的格式是:2013-01-12 23:23:56这种格式你就悲剧了,这是你就可以使用DATE()函数用来返回日期的部分,所以这条sql应该如下处理:

1
select * from product where Date(add_time) = '2013-01-12'

 

1
select * from product where Date(add_time) = '2013-01-12'

 

再来一个,如果你要查询2013年1月份加入的产品呢?

1
select * from product where date(add_time) between '2013-01-01' and '2013-01-31'

 

你还可以这样写:

1
select * from product where Year(add_time) = 2013 and Month(add_time) = 1

 

1
select * from product where Year(add_time) = 2013 and Month(add_time) = 1

 

这些你该知道mysql日期函数在对你处理日期比较问题的作用了吧?

 

php格式化时间:

1
2
3
4
$now = '2015-2-27 23:22:33';
$timestamp = strtotime($now);
echo date("Y-m-d", $timestamp);
//2015-2-27

 

坚持原创技术分享,您的支持将鼓励我继续创作!