我试图获得2日期之间的间隔。
如果我有' 2014-10-31'和' 2014-10-10'然后结果必须是2014-10-21'
这就是我所做的。
SELECT FROM_UNIXTIME(unix_timestamp(CURDATE()) - unix_timestamp('2014-10-10'), '%Y-%m-%d')
但这又回来了 1970年1月22日
我希望它返回的是2014-10-21
为什么不起作用?以及如何得到我正在寻找的答案?
提前谢谢
答案 0 :(得分:5)
UNIX_TIMESTAMP()
的结果是 - 你可能已经猜到了 - 一个UNIX时间戳:一个在1970-01-01 00:00:00 UTC从0开始的整数,从那以后计算每秒一个。重要的是,这个时间尺度上的零既不是0 A.D.也不是其他一些历史事件,而是1970年1月1日。
您的示例unix_timestamp(CURDATE()) - unix_timestamp('2014-10-10')
计算的差异为21天(截至发布时间) - 这相当于1970-01-01 + 21天的日期,结果是1970-01-22。
修改强>
从@ Mike的评论中提出的问题:减去两个日期给出了一个时间跨度,而不是一个日期。要将其再次解释为日期,您需要将其添加到某个起始时间点。如上所示,UNIX时间戳使用1970-01-01,而格里高利历则使用基督诞生的虚拟年份。要使用它,你需要
DATE_ADD('0001-01-01', INTERVAL (UNIX_TIMESTAMP(CURDATE()) - UNIX_TIMESTAMP('2014-10-10')) SECOND)
导致0001-01-22
的正确值。