mysql 通过TIMESTAMPDIFF函数计算倒计时


前言

我想通过数据库字的一个时间字段与当前时间的差计算是否过期或者超时,有多种方法可以实现,
这里我选择了一种比较简单的实现方式 通过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的基础使用,可以根据自己的业务组合成自己想要的效果

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值