php - date_diff 返回疯狂的东西

标签 php datetime datediff date-comparison

今天我在处理日期时用头撞墙。 我正在循环一堆日期时间并将它们与当前日期进行比较以确定它们有多远。

所以我会返回“明天下午 4 点”、“昨天下午 3 点”、“今天中午 12 点”、“3 天前”、“3 天内”等内容。

一切正常,直到今天/明天/昨天。

当到达这些日期时,日期差异会返回愚蠢的东西,例如 -0 和 +0。 我的理论是,可以说…… future 23 小时,甚至 future 10 小时的日期,即使它们发生在“第二天”,也会返回 0 而不是 1。

不幸的是,date_diff 似乎不返回小数或允许我进行任何形式的舍入。

这里是一些示例代码:

$difference = $meeting_date->diff($current_date);
$difference = $difference->format('%R%a');

然后我检查这个差值整数,看看它是否为 0、-1、1、< -1 或 > 1。 我会在必要时处理前面的+号。

那些应该是-1或+1的,有时会返回-0或+0(..什么?)

此外,-0 并不 = 0,但根据 PHP 显然小于 -1。

S.O.S,有人帮忙。

我已阅读所有相关问题,这不是重复的问题,也与随机 6015 错误无关。使用 diff->days 也不是答案。这总是返回绝对值而不是负数,这会是一个问题。

最佳答案

嗯...我的方法是分割时间和日期显示。像这样的事情:

$meeting_day = DateTime::createFromFormat($meeting_date->format('Y-m-d'));

<p>// set $today to today's date at 0:00</p>

$diff = $meeting_day->diff($today);

这应该会给你一个可用的基于天的差异(用于渲染今天、昨天、明天等)。

关于php - date_diff 返回疯狂的东西,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12160960/

相关文章:

php - Composer 无法打开流 : php_network_getaddresses: getaddrinfo failed: Name or service not known

php - Magento 通过位置和 html 输出的子类别数量列出类别

Java时间与操作系统时间不同

php - 我可以避免无效日期的 `DateTime::__construct` 警告吗?

php - 使用面向对象的 php 在 mysqli 函数中更新查询

php - 使用 PHP mt_rand() 而不是 MySQL rand() 以避免查询速度慢

python - python 中的时间戳 firebase - firebase.put() 中的参数

sql - 如何获取sql server 2005中两个日期之间的月份数

php - 用PHP计算耗时

mysql - 在 sql 结果中填充空日期的最直接方法是什么(在 mysql 或 perl 端)?