我尝试执行以下查询以从给定日期中减去一天:
DATE(FROM_UNIXTIME(UNIX_TIMESTAMP('2013-04-01') - 86400))
它返回我 2013-03-30,但它应该返回 2013-03-31。
如果我尝试减去 2013-04-02 的一天,我会正确返回 2013-04-01。这是mysql中的日期错误吗?
我尝试执行以下查询以从给定日期中减去一天:
DATE(FROM_UNIXTIME(UNIX_TIMESTAMP('2013-04-01') - 86400))
它返回我 2013-03-30,但它应该返回 2013-03-31。
如果我尝试减去 2013-04-02 的一天,我会正确返回 2013-04-01。这是mysql中的日期错误吗?
这不是错误-您发现的是夏令时中缺少的一小时:unixtime 和您的计算不知道的事情,因为您计算的是秒而不是天。
这正是 DBMS 具有特殊 DATETIME 数据类型的原因 - 以处理时区、闰年、闰秒、夏令时和日历中的所有特性。
让数据库为您完成工作 - 这是获得所需内容的更简单和更好的方法:
SELECT DATE('2013-04-01') - INTERVAL 1 DAY
您的代码假设所有日子都有 24 小时。昨天,3 月 31 日,在大多数欧洲国家有 23 个小时。要减去一天,您需要这样的东西:
SELECT NOW() - INTERVAL 1 DAY