计算无效日期之间的差异并给出巨大错误

Calculating the difference between dates not working and giving an huge error

您好,我正在为移动设备制作在线优惠券系统。优惠券限时有效,我必须检查一下优惠券。我使用 date(d/m/Y H:i:s) 来显示日期和时间,我还有一个过期日期,它只是一个字符串,稍后我将其转换为日期。

这是我检查优惠券是否过期的方法:

if ($date1B > $date2B) {
   echo "<script>alert('Expired coupon!!');</script>";
}

现在我要计算优惠券过期的天数

这是我在 W3Schools 上找到的,但下面的示例使用了 date_create(),因此您可以自定义日期和时间。我已经有 2 个日期和时间。

$date1 = date("d-m-Y  H:i:s");
$date2 = date_format($date2A, 'd-m-Y H:i:s');
$diff = date_diff($date1,$date2);
echo $diff->format("%a days %h Hours %i Minute %s Seconds ");

当我用现有变量替换变量时,出现以下错误:

date_diff() expects parameter 1 to be DateTimeInterface, string given in

Call to a member function format() on boolean in

完整的 .PHP 页面:

<?php
   date_default_timezone_set("America/Curacao");

   $date1A = date("d/m/Y  H:i:s");
   $date1B = date("dmYHis");
   $date2B = "27032017042100";
   $date2A = date_create_from_format('dmYHis', $date2B);

   echo "Datum 1: " . $date1A . "<br>" ;
   echo "Datum 1: " . $date1B . "<br><br>";
   echo "Datum 2: " . date_format($date2A, 'd/m/Y H:i:s') . "<br>";
   echo "Datum 2: " . $date2B . "<br>";

   if ($date1B > $date2B) {
      echo "<script>alert('Klaar!!');</script>";
   }

   $date1 = date("d/m/Y  H:i:s");
   $date2 = date_format($date2A, 'd/m/Y H:i:s');
   $diff = date_diff($date1,$date2);
   echo $diff->format("%a days %h Hours %i Minute %s Seconds ");
?>

计算两个日期之间差异的最简单方法是 date_diff() 函数,该函数在无效日期时给出错误。

在将值传递给 date_diff 函数之前,您应该使用 date_create() 函数。

用法:

<?php
$startDate = date_create('2014-06-13');
$endDate = date_create('2017-08-10');
$diff = date_diff($startDate, $endDate);
var_export($diff);

这给你这样的输出:

DateInterval::__set_state(array( 'y' => 3, 'm' => 1, 'd' => 28, 'h' => 0, 'i' => 0, 's' => 0, 'weekday' => 0, 'weekday_behavior' => 0, 'first_last_day_of' => 0, 'invert' => 0, 'days' => 1154, 'special_type' => 0, 'special_amount' => 0, 'have_weekday_relative' => 0, 'have_special_relative' => 0, ))

更新

您可以使用或修改以下函数来获取差异:

function dateDifference($startDate, $endDate)
{
    try {
        $startDate = date_create($startDate);
        $endDate = date_create($endDate);
        $diff = date_diff($startDate, $endDate);
        $d = "";
        if ($diff->y != 0) {
            if ($diff->y > 1) {
                $d .= $diff->y . " Years ";
            } else {
                $d .= $diff->y . " Year ";
            }
        }
        if ($diff->m != 0) {
            if ($diff->m > 1) {
                $d .= $diff->m . " Months ";
            } else {
                $d .= $diff->m . " Month ";
            }
        }
        if ($diff->d != 0) {
            if ($diff->d > 1) {
                $d .= $diff->d . " Days ";
            } else {
                $d .= $diff->d . " Day ";
            }
        }
        if ($diff->h != 0) {
            if ($diff->h > 1) {
                $d .= $diff->h . " Hours ";
            } else {
                $d .= $diff->h . " Hour ";
            }
        }
        if ($diff->i != 0) {
            if ($diff->i > 1) {
                $d .= $diff->i . " Minutes ";
            } else {
                $d .= $diff->i . " Minute ";
            }
        }
        if ($diff->s != 0) {
            if ($diff->s > 1) {
                $d .= $diff->s . " Seconds ";
            } else {
                $d .= $diff->s . " Second ";
            }
        }
        return $d;
    }
    catch(Exception $e)
    {
        die("ERROR");
    }
}

运行 是这样的:

echo dateDifference('2014-10-16', '2017-06-08');

应输出:

2 Years 7 Months 23 Days

根据@ShaktiPhartiyal 的回答,要以您想要的格式输出,只需使用:

$startDate = date_create('2014-06-13');
$endDate = date_create('2017-08-10');
$diff = date_diff($startDate, $endDate);
echo $diff->format("%a days %h Hours %i Minute %s Seconds ");

输出将是:

1154 days 0 Hours 0 Minute 0 Seconds

已更新 .PHP 文件

我修正了错误。这是更新后的 .PHP 页面:

<?php

    date_default_timezone_set("America/Curacao");
    $date1A = date("d-m-Y H:i:s");
    $date1 = date_create($date1A);
    echo date_format($date1,"d-m-Y H:i:s");

    echo "<br>";

    $date2B = "31032017042100";
    $date2A = date_create_from_format('dmYHis', $date2B);
    $final = date_format($date2A, 'd-m-Y H:i:s');
    $date2 = date_create($final);
    echo date_format($date2,"d-m-Y H:i:s");

    echo "<br>";

    $diff = date_diff($date1, $date2);
    echo $diff->format("%R %a days %h Hours %i Minute %s Seconds");

    if ($date1 > $date2) {
       echo "<script>alert('Coupon Expired!!');</script>";
    }

?>