计算无效日期之间的差异并给出巨大错误
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>";
}
?>
您好,我正在为移动设备制作在线优惠券系统。优惠券限时有效,我必须检查一下优惠券。我使用 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>";
}
?>