【问题标题】:date_diff returning crazy thingsdate_diff 返回疯狂的东西
【发布时间】:2012-08-28 14:01:12
【问题描述】:

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

所以我要返回诸如“明天@下午 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 的,有时返回为 -0 或 +0(..what?)

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

求救,有人帮忙。

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

【问题讨论】:

    标签: php datetime datediff date-comparison


    【解决方案1】:

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

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

    // 将 $today 设置为今天 0:00 的日期

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

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

    【讨论】:

    • 不幸的是,这仍然产生了 -0 和 +0。将今天的日期设置为 0:00 时间,我认为可能会奏效。
    • 我会将其列为已接受的答案,因为如果没有您将事情设置为 0:00 的建议,我将无法解决它。你是对的,实际上我只需要更改我已经拥有的当前代码,只需将当前日期更改为 0:00 时间,并将会议日期的时间与 0:00 进行比较,因此严格比较它们基于on 0:00 ,但从原始日期获取时间以用于显示目的!谢谢!
    • 嗯,这就是我的意思。抱歉,我不够清楚,很高兴你能弄清楚。
    • 啊是的,我不确定为什么你的方法当时不起作用,可能是遗漏了一些东西。不管你从我这里得到正确答案的分数:) 虽然你的 createFromFormat 语法是错误的,但我明白了
    【解决方案2】:

    为什么不将time() 与另一个可以使用 strtotime() 格式化的日期时间进行比较,而不是比较天数

    time()

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

    strtotime()

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

    【讨论】:

    • 最终使用了不同的解决方案,我敢肯定这会奏效,但需要进行相当多的更改,因为不幸的是,您无法通过 date_diff 轻松获取该信息。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-20
    • 2010-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多