我想要获得2日期之间的间隔.
如果我有'2014-10-31'和'2014-10-10'那么结果必须是'2014-10-21'
这就是我所做的.
SELECT FROM_UNIXTIME(unix_timestamp(CURDATE()) - unix_timestamp('2014-10-10'), '%Y-%m-%d')
Run Code Online (Sandbox Code Playgroud)
但这是回归1970-01-22
我想要它返回的是2014-10-21
为什么不起作用?以及如何得到我正在寻找的答案?
先感谢您
结果UNIX_TIMESTAMP()是 - 你可能已经猜到了 - 一个UNIX时间戳:一个在1970-01-01 00:00:00 UTC从0开始的整数,从那以后每秒计数一个.重要的是,这个时间尺度上的零既不是0 AD也不是其他历史事件,而是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)
Run Code Online (Sandbox Code Playgroud)
得到正确的价值0001-01-22.
| 归档时间: |
|
| 查看次数: |
639 次 |
| 最近记录: |