date_diff回归疯狂的事情

时间:2012-08-28 14:01:12

标签: php datetime datediff date-comparison

今天在与日期合作时,我的头靠在墙上。 我循环了一堆日期时间,并将它们与当前日期进行比较,以确定它们的距离。

所以我要回复'tomorow @ 4pm','昨天下午3点','今天中午12点','3天前','3天'等等。

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

日期差异在到达这些日期时会返回-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(......什么?)

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

S.O.S,有人帮忙。

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

2 个答案:

答案 0 :(得分: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);

这应该会给你一个可用的日常差异(今天,昨天,明天等等)。

答案 1 :(得分:1)

为什么不将time()与另一个可以使用strtotime()

格式化的日期时间进行比较,而不是比较天数。

time()

您可以将您要比较的日期时间转换为strtotime()

strtotime()

现在你可以用秒来比较两者之间的差异,并根据你认为适合的天数,小时数等进行划分