54

我在mysql中有一个日期时间字段(endTime)。我使用 gmdate() 来填充这个 endTime 字段。

存储的值类似于 2009-09-17 04:10:48。我想将此结束时间添加 30 分钟并将其与当前时间进行比较。即)允许用户在其结束时间仅 30 分钟内完成某项任务。在他的结束时间 30 分钟后,我不应该让他做任务。

我怎么能在 php 中做到这一点?

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

提前致谢

4

6 回答 6

125

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

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


对于纯 PHP 解决方案,请使用strtotime

strtotime('+ 30 minute',$yourdate);
于 2009-09-17T05:33:09.020 回答
47

试试这个

DATE_ADD(datefield, INTERVAL 30 MINUTE)
于 2009-09-17T05:34:53.243 回答
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')
于 2009-09-17T05:34:35.233 回答
5

Dominc 的想法是正确的,但将计算放在表达式的另一端。

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

这样做的好处是您只进行一次 30 分钟计算,而不是对每一行进行一次计算。这也意味着 MySQL 可以使用该列上的索引。这两个都给你一个加速。

于 2009-09-17T07:08:05.880 回答
4

使用 DATE_ADD 函数

DATE_ADD(datecolumn, INTERVAL 30 MINUTE);
于 2016-11-15T04:45:29.293 回答
0

通过添加 30 分钟从 MySQL 表中获取日期

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
于 2021-07-21T14:59:53.257 回答