0

我看到其他语言的关于这个问题的其他帖子,但我找不到 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 5.2 兼容的东西,所以不能使用DateTime::diff.

编辑:更改以澄清我确实需要一个数字返回值,对不起:)

4

6 回答 6

1

如果我正确解释了这个问题,你需要GregorianToJD或 mysql to_days

这两个函数都返回特定日期的儒略日,这基本上是自“第 0 天”以来的天数。

于 2011-08-07T11:37:19.607 回答
1
$date1 = "2011-08-06 14:05:28";
$date2 = "2011-08-07 08:46:28";
if(date('Ymd', strtotime($date1)) == date('Ymd', strtotime($date2)))
{
    // Same day!
}

更新

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

$days = abs(date('z', strtotime($date1)) - date('z', strtotime($date2)));

这是我能做的最好的事情,但它要这样做$date1并且$date2是在同一年。

于 2011-08-07T11:42:07.860 回答
0
  $date1 = "2011-08-06 14:05:28";
  $date2 = "2011-08-07 08:46:28";
  if(date("Ymd",strtotime($date1)) == date("Ymd",strtotime($date2)) {
      // they match

  } else {
      // calculate the difference
      $diff = ceil(abs(strtotime($date1)-strtotime($date2))/86400); 

  }
于 2011-08-07T11:36:10.317 回答
0
  1. 将日期转换为时间戳。如何做到这一点取决于输入数据的格式。
  2. date使用 PHP 的函数格式化时间戳(Ymd看起来很合适$format)。
  3. 比较结果字符串是否相等。

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

于 2011-08-07T11:37:17.610 回答
0
$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-07T11:47:14.207 回答
0

我会尝试这样的事情(主要使用时间戳):

/**
 * @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;

}

我用你的两个测试用例都试过了,它就像你想要的那样工作。如果您想要任何更改,您可以编辑该功能。希望能帮助到你!

于 2016-08-21T12:57:26.567 回答