MySql 获取本月|本月第一天|最后一天 的时间和时间戳

获取时间

select curdate();  -- 2020-07-21
select DAY(CURDATE()); -- 21
SELECT MONTH(CURDATE()); -- 7
SELECT YEAR(CURDATE()); -- 2020

select DATE_ADD(curdate(),interval -day(curdate())+1 day); -- 2020-07-01

SELECT DATE_ADD(CURDATE(),INTERVAL 1-DAYOFMONTH(CURDATE()) DAY);  -- 获取本月第一天

select last_day(curdate());   -- 获取当月最后一天
select date_add(curdate()-day(curdate())+1,interval 1 month ) -- 获取下个月的第一天

这里说明下 DATE_ADD(date,INTERVAL expr unit)函数:

针对上面的例子:

SELECT DATE_ADD(CURDATE(),INTERVAL 1-DAYOFMONTH(CURDATE()) DAY)

DATE_ADD(起始时间,INTERVAL 添加数目 单位)

其中单位有很多类型:

set @dt = now();
select date_add(@dt, interval 1 day); — add 1 day
select date_add(@dt, interval 1 hour); — add 1 hour
select date_add(@dt, interval 1 minute); — …
select date_add(@dt, interval 1 second);
select date_add(@dt, interval 1 microsecond);
select date_add(@dt, interval 1 week);
select date_add(@dt, interval 1 month);
select date_add(@dt, interval 1 quarter);
select date_add(@dt, interval 1 year);
select date_add(@dt, interval -1 day); — sub 1 day

时间戳

获取本月第一天的时间戳:

SELECT UNIX_TIMESTAMP('2020-07-01'); -- 1593532800
SELECT DATE_FORMAT(NOW(), '%Y-%m-01'); -- 2020-07-01

-- 本月第一天时间戳
select UNIX_TIMESTAMP(DATE_FORMAT(NOW(), '%Y-%m-01')); -- 1593532800

获取上个月第一天时间戳:

SELECT UNIX_TIMESTAMP('2020-06-01'); -- 1590940800
SELECT date_sub(date_format(now(),'%y-%m-%d'),interval extract(day from now())-1 day); -- 2020-07-01
SELECT date_sub(date_format(now(),'%y-%m-%d'),interval 1 MONTH); -- 2020-06-21
SELECT date_sub(DATE_FORMAT(NOW(), '%Y-%m-01'),interval 1 MONTH); -- 2020-06-01

-- 获取上个月第一天时间戳
select UNIX_TIMESTAMP(date_sub(date_sub(date_format(now(),'%y-%m-%d'),interval extract(day from now())-1 day),interval 1 month)); -- 1590940800
select UNIX_TIMESTAMP(date_sub(DATE_FORMAT(NOW(), '%Y-%m-01'),interval 1 month));

你可能感兴趣的:(mysql)