如何在PHP中获得两个日期之间的绝对日期差?

如何在PHP中获得两个日期之间的绝对日期差?,php,date,php-5.2,Php,Date,Php 5.2,我看到在其他语言中也有关于这个问题的帖子,但我找不到一篇关于PHP的帖子。我不是在寻找两个约会时间之间的差异,而是在寻找有多少天不同。例如: 2011-08-06 14:05:28 及 2011-08-07 08:46:28 相隔不到一天,但我需要一个函数,该函数将告诉我它们位于相隔一天的日期,即,将为这两个日期返回值1,并为以下日期返回值2,例如: 2011-08-06 23:05:28 及 2011-08-08 01:46:28 真的,我猜这一定很容易,但我以前没怎么和约会过 哦,还有一个限

我看到在其他语言中也有关于这个问题的帖子,但我找不到一篇关于PHP的帖子。我不是在寻找两个约会时间之间的差异,而是在寻找有多少天不同。例如:

2011-08-06 14:05:28

2011-08-07 08:46:28

相隔不到一天,但我需要一个函数,该函数将告诉我它们位于相隔一天的日期,即,将为这两个日期返回值
1
,并为以下日期返回值
2
,例如:

2011-08-06 23:05:28

2011-08-08 01:46:28

真的,我猜这一定很容易,但我以前没怎么和约会过

哦,还有一个限制,我需要与PHP5.2兼容的东西,所以不能使用
DateTime::diff

编辑:更改为澄清我确实需要一个数字返回值,抱歉:)

  • 将日期转换为时间戳。这取决于输入数据的格式
  • 使用PHP函数格式化时间戳(
    Ymd
    似乎是合适的
    $Format
  • 比较结果字符串是否相等

  • 如果您需要以天为单位的实际差异,请分别调用
    date
    ,使用
    Y
    m
    d
    作为格式,从结果中构造时间戳(使用),并将时间戳之间的差异除以86400(每天的秒数)。

    如果我正确解释了问题,您需要一个或多个mysql

    这两个函数都返回一个特定日期的值,该日期基本上是自“第0天”起的天数

    更新

    如果您真的想要从日期到日期之间的天数,我建议您更新到PHP5.3。计算天数可能相当困难,特别是如果您希望能够处理不同年份的天数

    $days = abs(date('z', strtotime($date1)) - date('z', strtotime($date2)));
    
    这是我能做的最好的了,但它要求
    $date1
    $date2
    在同一年

    $secondsApart = strtotime( '2011-08-07 08:46:28' ) -
                       strtotime( '2011-08-06 14:05:28' );
    
    现在,您可以基于此计算任何其他值:

    $hoursApart = round( $secondsApart / 3600 );
    $daysApart = round( $secondsApart / 86400 );
    ...
    

    如果更适合您的需要,您也可以使用floor()或ceil()代替round()。

    我会尝试类似的方法(主要使用时间戳):


    我用你的两个测试用例都试过了,它完全符合你的要求。如果需要任何更改,可以编辑该函数。希望有帮助

    与上述评论相同。。。我真的很想得到一个数字答案。这将返回不同月份相同日期的错误答案,即
    2011-08-15
    2011-09-15
    。可能重复不确定。。。我不需要月或年,只需要天数,因此选择的答案(而不是2年、3个月、2天,我想要795)是的,
    to_days
    看起来不错。。。我不确定另一个,我不清楚它会返回什么值…嘿,如果这有效,听起来是一个简单的解决方案。。。我会试试看,然后再打给你。
    $secondsApart = strtotime( '2011-08-07 08:46:28' ) -
                       strtotime( '2011-08-06 14:05:28' );
    
    $hoursApart = round( $secondsApart / 3600 );
    $daysApart = round( $secondsApart / 86400 );
    ...
    
    /**
     * @param string $date1
     * @param string $date2
     * @return int
     *   Number of days between the two dates.
     */
    function date_diff_days($date1, $date2) {
    
        // Ignore the time part and convert the date part to timestamp.
        $date1 = substr($date1, 0, 10);
        $date1 = strtotime($date1 . ' 00:00:00');
        $date2 = substr($date2, 0, 10);
        $date2 = strtotime($date2 . ' 00:00:00');
    
        // Compute the difference in seconds.
        $diff_secs = abs($date1 - $date2);
    
        // Convert the difference to days.
        $diff_days = ceil($diff_secs / (60 * 60 * 24));
    
        return $diff_days;
    
    }