您在这里本质上使用了两个具有不同目的和机制的函数.
MySQL DATEDIFF()
此函数完全忽略时间戳.因此,即使重叠时间会增加或删除一天,这也是无关紧要的,因为它只是将它们go 掉,然后计算dates天之间有多少天.因此,无论这两个部分的时间如何,SQL都会始终返回30.
PHP date_diff()
该函数判断两个Date Time对象之间存在的总时间-这里重要的是,它还考虑了整个时间,这意味着您可以在答案中获得从近29天到近31天的整个范围,具体取决于两个时间戳中的一天中的时间.
Solutions
这个问题缺少的是你会发生什么.因此,以下是处理这个问题的两种方法.要么:a)告诉PHP做与PHP相同的事情,并比较时间段,或者b)告诉PHP做与SQL相同的事情,并忽略时间.
100
使用DAY
和TIMESTAMPDIFF()
来获取时间戳之间的全天数,而不是DATEDIFF()
.
SELECT
TIMESTAMPDIFF(DAY, '2024-05-03 12:57', '2024-06-02') AS days;
这是与PHP相同的SQL:
echo date_diff(
new DateTime("2024-06-02"),
new DateTime("2024-05-03 12:57")
)->days;
两人都会回归:29
100
然后你的SQL:
SELECT
DATEDIFF('2024-06-02', '2024-05-03 12:57') AS days;
相当于在PHP中删除时间(好吧,将其设置为00:00):
echo date_diff(
(new DateTime("2024-06-02"))->setTime(0, 0),
(new DateTime("2024-05-03 12:57"))->setTime(0, 0)
)->days;
两者都会输出:30