1

我尝试执行以下查询以从给定日期中减去一天:

DATE(FROM_UNIXTIME(UNIX_TIMESTAMP('2013-04-01') - 86400))

它返回我 2013-03-30,但它应该返回 2013-03-31。

如果我尝试减去 2013-04-02 的一天,我会正确返回 2013-04-01。这是mysql中的日期错误吗?

4

3 回答 3

4

这不是错误-您发现的是夏令时中缺少的一小时:unixtime 和您的计算不知道的事情,因为您计算的是秒而不是天。

这正是 DBMS 具有特殊 DATETIME 数据类型的原因 - 以处理时区、闰年、闰秒、夏令时和日历中的所有特性。

让数据库为您完成工作 - 这是获得所需内容的更简单和更好的方法:

SELECT DATE('2013-04-01') - INTERVAL 1 DAY
于 2013-04-01T14:54:45.110 回答
0

您的代码假设所有日子都有 24 小时。昨天,3 月 31 日,在大多数欧洲国家有 23 个小时。要减去一天,您需要这样的东西:

SELECT NOW() - INTERVAL 1 DAY
于 2013-04-01T14:56:35.417 回答
0

为什么不使用内置DATE_SUB()功能?

SELECT DATE_SUB('2013-04-01', INTERVAL 1 DAY)

编辑:不,这不是MySQL 中的日期错误。

于 2013-04-01T14:57:30.093 回答