在PHP/MySQL中如何将日期时间增加30分钟?

62

我在mysql中有一个datetime字段(endTime),使用gmdate()来填充此endTime字段。

存储的值类似于2009-09-17 04:10:48。我想在这个endTime上添加30分钟,并将其与当前时间进行比较。也就是说,用户只能在他的endTime之后的30分钟内完成某项任务。超过他的endTime 30分钟后,他们不应该被允许执行任务。

如何在php中实现这一点?

我正在使用gmdate确保没有时区差异。

6个回答

133

如果你正在使用MySQL,你可以像这样做:

SELECT '2008-12-31 23:59:59' + INTERVAL 30 MINUTE;


要使用纯PHP解决方案,可以使用strtotime函数。

strtotime('+ 30 minute',$yourdate);

这是mysql和php的完美解决方案。应该将其标记为答案。 - Taha Khan

53

试试这个

DATE_ADD(datefield, INTERVAL 30 MINUTE)

7

MySQL有一个名为ADDTIME的函数,可以将两个时间相加 - 因此您可以在MySQL中完成整个过程(前提是您使用的是 >= MySQL 4.1.3)。

类似以下代码(未经测试):

SELECT * FROM my_table WHERE ADDTIME(endTime + '0:30:00') < CONVERT_TZ(NOW(), @@global.time_zone, 'GMT')

1
我来这里寻找一种通用的方法来添加日期时间变量,只有这个答案对我起作用。 - kurast

5

Dominc的想法是对的,但将计算放在表达式的另一侧。

SELECT * FROM my_table WHERE endTime < DATE_SUB(CONVERT_TZ(NOW(), @@global.time_zone, 'GMT'), INTERVAL 30 MINUTE)

这样做的好处是你只需要一次计算30分钟,而不是在每一行上都进行计算。这也意味着MySQL可以使用该列上的索引。这两个优势都能提高速度。


5
使用DATE_ADD函数
DATE_ADD(datecolumn, INTERVAL 30 MINUTE);

1
从MySQL表中获取日期并添加30分钟
SELECT loginDate, date_add(loginDate,interval 30 minute) as newLoginDate 
FROM `tableName`;

这将会产生以下结果

Login Date - 2020-07-22 14:00:00
New Login Date - 2020-07-22 14:30:00

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接