我有一个MySQL表,其中包含end_date
类型DATETIME
的字段,用于存储UTC日期。我希望得到NOW()
和end_date
之间的分钟差异。我alredy在stackoverflow上发现了很多问题和答案来执行此操作,有些使用UNIX_TIMESTAMP
从我理解的内容中获取输入值并将其转换为UTC(所以我不能使用它,因为我的日期是alredy (UTC)和其他建议使用TIME_TO_SEC
并除以60
。这就是我选择的内容:
INTERVAL (TIME_TO_SEC(UTC_TIMESTAMP()) - TIME_TO_SEC(end_date)) / 60 MINUTE
直到当天与end_date
天不同,它才能正常工作。此时,减法的结果是否定的,当我在DATE_ADD
函数中使用此代码时,它会输出错误的结果。我该如何解决这个问题?
答案 0 :(得分:2)
尝试ABS
INTERVAL (ABS( TIME_TO_SEC(UTC_TIMESTAMP()) - TIME_TO_SEC(end_date))) / 60 MINUTE
或者,如果您总是想要肯定的差异,那么请end_date
检查它是否晚于now
或utc_timestamp
。如果稍后将其替换为now
,则差异将为0
。
答案 1 :(得分:2)
尝试使用
INTERVAL (TO_SECONDS(UTC_TIMESTAMP()) - TO_SECONDS(end_date)) / 60 MINUTE
答案 2 :(得分:0)
您可以使用MySQL的TIMESTAMPDIFF()
功能:
SELECT TIMESTAMPDIFF(MINUTE, CURRENT_TIME, end_date)
FROM my_table
但请注意,对于此应用程序,您应该使用MySQL的TIMESTAMP
数据类型(在会话的time_zone
和UTC之间自动转换以进行存储)而不是DATETIME
(不执行任何操作)时区转换,但只是存储值,就好像拍了一张日历和时钟的照片一样。因此,如果您的会话time_zone
不是UTC,那么您当前的DATETIME
字段会因缺少时区转换而出现错误 - 您必须明确调整此类差异,例如:使用CONVERT_TZ()
。
有关详细信息,请参阅MySQL Server Time Zone Support。