我在mysql中有一个datetime字段(endTime),使用gmdate()
来填充此endTime字段。
存储的值类似于2009-09-17 04:10:48
。我想在这个endTime上添加30分钟,并将其与当前时间进行比较。也就是说,用户只能在他的endTime之后的30分钟内完成某项任务。超过他的endTime 30分钟后,他们不应该被允许执行任务。
如何在php中实现这一点?
我正在使用gmdate确保没有时区差异。
试试这个
DATE_ADD(datefield, INTERVAL 30 MINUTE)
MySQL有一个名为ADDTIME
的函数,可以将两个时间相加 - 因此您可以在MySQL中完成整个过程(前提是您使用的是 >= MySQL 4.1.3)。
类似以下代码(未经测试):
SELECT * FROM my_table WHERE ADDTIME(endTime + '0:30:00') < CONVERT_TZ(NOW(), @@global.time_zone, 'GMT')
Dominc的想法是对的,但将计算放在表达式的另一侧。
SELECT * FROM my_table WHERE endTime < DATE_SUB(CONVERT_TZ(NOW(), @@global.time_zone, 'GMT'), INTERVAL 30 MINUTE)
这样做的好处是你只需要一次计算30分钟,而不是在每一行上都进行计算。这也意味着MySQL可以使用该列上的索引。这两个优势都能提高速度。
DATE_ADD(datecolumn, INTERVAL 30 MINUTE);
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