2

今天把我的头撞到墙上去处理日期。我正在遍历一堆日期时间并将它们与当前日期进行比较以确定它们有多远。

所以我要返回诸如“明天@下午 4 点”、“昨天下午 3 点”、“今天下午 12 点”、“3 天前”、“3 天后”等内容。

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

当到达这些日期时,日期差异会返回诸如 -0 和 +0 之类的愚蠢的东西。我的理论是,可以说……未来 23 小时,甚至未来 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 的形式返回(..what?)

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

SOS,有人帮忙。

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

4

2 回答 2

1

嗯...我在这里的方法是拆分时间和日期显示。像这样的东西:

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

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

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

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

于 2012-08-28T14:21:48.747 回答
1

与其比较天数,不如与time()另一个可以使用 strtotime() 格式化的日期时间进行比较

时间()

您可以转换您要与之比较的任何日期时间strtotime()

strtotime()

现在您可以在几秒钟内比较两者的差异,并根据您认为合适的天数、小时数等进行划分

于 2012-08-28T14:23:16.240 回答