前言
我想通过数据库字的一个时间字段与当前时间的差计算是否过期或者超时,有多种方法可以实现,
这里我选择了一种比较简单的实现方式 通过TIMESTAMPDIFF函数
一、mysql 通过TIMESTAMPDIFF函数计算倒计时
语法:
TIMESTAMPDIFF(unit,datetime_expr1,datetime_expr2)
unit 代表时间单位 具体如下:
unit | 单位 |
---|---|
SECOND | 秒 |
MINUTE | 分钟 |
HOUR: | 小时 |
DAY | 天 |
WEEK | 星期 |
MONTH | 月 |
QUARTER | 季度 |
YEAR | 年 |
datetime_expr1 参数代表传入的第一个时间
datetime_expr2 参数代表传入的第二个时间
结果等于参数2减去参数1的差值
二、使用步骤
1.计算倒计时还剩多少天
now()等于当前日期(2022-05-21)
代码如下(示例):
没超时的情况下
SELECT
IF
( NOW()< '2022-05-23 18:00:00',
CONCAT( TIMESTAMPDIFF( DAY, NOW(), '2022-05-23 18:00:00' ), '天' ),
'已超时' ) AS remaining_time;
结果
**超时的情况下**
SELECT
IF
( NOW()< '2022-05-20 18:00:00',
CONCAT( TIMESTAMPDIFF( DAY, NOW(), '2022-05-20 18:00:00' ), '天' ),
'已超时' ) AS remaining_time;
2.计算倒计时还剩多少小时(每24小时转1天)
代码如下(示例):
SELECT
IF
(
NOW() < '2022-05-25 18:00:00',
IF
(
TIMESTAMPDIFF( HOUR, NOW(), '2022-05-25 00:00:00' ) >= 24,
CONCAT(
ROUND( TIMESTAMPDIFF( HOUR, NOW(), '2022-05-25 00:00:00' ) / 24, 0 ),
'天',
TIMESTAMPDIFF( HOUR, NOW(), '2022-05-25 00:00:00' ) % 24,
'时'
),
CONCAT( TIMESTAMPDIFF( HOUR, NOW(), '2022-05-25 00:00:00' ), '时' )),
'已超时'
) AS remaining_time;
结果
3.完整版
SELECT
IF
(
NOW() < last_ship_time ,
IF
(
TIMESTAMPDIFF( HOUR, NOW(), last_ship_time ) >= 24,
CONCAT(
ROUND( TIMESTAMPDIFF( HOUR, NOW(), last_ship_time ) / 24, 0 ),
'天',
TIMESTAMPDIFF( HOUR, NOW(), last_ship_time ) % 24,
'时'
),
CONCAT( TIMESTAMPDIFF( HOUR, NOW(), last_ship_time ), '时' )),
'已超时'
) AS remaining_time
FROM
order_info
显示时分秒
IF
(
TIMESTAMPDIFF( SECOND, NOW(), oi.last_ship_time ) >= 0,
(
SELECT
CONCAT(
TRUNCATE ( TIMESTAMPDIFF( SECOND, NOW(), oi.last_ship_time ) / ( 60 * 60 * 24 ), 0 ),
'天',
TRUNCATE ( TIMESTAMPDIFF( SECOND, NOW(), oi.last_ship_time ) % ( 60 * 60 * 24 ) / ( 60 * 60 ), 0 ),
'时',
TRUNCATE ( TIMESTAMPDIFF( SECOND, NOW(), oi.last_ship_time ) % ( 60 * 60 ) / 60, 0 ),
'分',
TRUNCATE ( TIMESTAMPDIFF( SECOND, NOW(), oi.last_ship_time ) % 60, 0 ),
'秒'
)
),
'已超时'
) AS remainingTime,
# 总结
这里是对于TIMESTAMPDIFF的基础使用,可以根据自己的业务组合成自己想要的效果