Mysql 为什么FROM_UNIXTIME返回的日期要追溯到1970年?

Mysql 为什么FROM_UNIXTIME返回的日期要追溯到1970年?,mysql,intervals,Mysql,Intervals,我想知道两次约会之间的时间间隔 如果我有“2014-10-31”和“2014-10-10”,那么结果需要是“2014-10-21” 这就是我所做的 SELECT FROM_UNIXTIME(unix_timestamp(CURDATE()) - unix_timestamp('2014-10-10'), '%Y-%m-%d') 但这又回来了 1970-01-22 我想要它返回的是2014-10-21 为什么它不起作用?以及如何得到我正在寻找的答案 提前感谢您UNIX_TIMESTAMP()的结

我想知道两次约会之间的时间间隔

如果我有“2014-10-31”和“2014-10-10”,那么结果需要是“2014-10-21”

这就是我所做的

SELECT FROM_UNIXTIME(unix_timestamp(CURDATE()) - unix_timestamp('2014-10-10'), '%Y-%m-%d')
但这又回来了 1970-01-22

我想要它返回的是2014-10-21

为什么它不起作用?以及如何得到我正在寻找的答案


提前感谢您

UNIX_TIMESTAMP()的结果是——您可能已经猜到了——一个UNIX时间戳:一个在UTC 1970-01-01 00:00:00以0开始的整数,从那时起每秒钟计算一次。重要的是,这个时间尺度上的零不是公元0年,也不是其他历史事件,而是1970年1月1日

您的示例,
unix\u timestamp(CURDATE())-unix\u 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

UNIX_TIMESTAMP()的结果是-您可能已经猜到了-一个UNIX时间戳:一个在UTC 1970-01-01 00:00:00从0开始的整数,从那时起每秒钟计数一个。重要的是,这个时间尺度上的零不是公元0年,也不是其他历史事件,而是1970年1月1日

您的示例,
unix\u timestamp(CURDATE())-unix\u 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

对不起,我的回答太快了。现在我注意到,您试图从unix时间中获取一个日期,它是减去2个unix时间戳的结果。结果不可能是你所期望的。从一个日期减去另一个日期并得到一个日期意味着什么?为什么要从“2014-10-31”中减去“2014-10-10”给出一个日期?您想要两个日期之间的天数吗?你能考虑一下你的问题吗?在几秒钟内两个密切相关的时间戳之间的差异将被视为1970-01-01 00∶00,加上很多秒,通常是1970的日期。对不起,我的回答太快了。现在我注意到,您试图从unix时间中获取一个日期,它是减去2个unix时间戳的结果。结果不可能是你所期望的。从一个日期减去另一个日期并得到一个日期意味着什么?为什么要从“2014-10-31”中减去“2014-10-10”给出一个日期?您想要两个日期之间的天数吗?你能考虑一下你的问题吗?在几秒钟内两个密切相关的时间戳之间的差异将被视为1970-01-01 00∶00,加上很多秒,通常是1970的日期。谢谢你的解释。你知道如何减去两个日期,然后得到日期格式的答案吗?@Mike:结果是一个间隔,而不是一个日期。谢谢你的解释。你知道如何减去2个日期,然后得到日期格式的答案吗?@Mike:结果是一个间隔,而不是日期。