我面临一个问题。我需要使用PHP计算日期时间差异,但得到错误的值。我在下面解释我的代码。
<?php
$added_date="31-01-2018 12:46 PM";
$endTime = strtotime("+10 minutes", strtotime($added_date));
$currentTime = strtotime(date("d-m-Y H:i:s A"));
//echo $currentTime.'</br>';
// (round(abs($currentTime - $endTime) / 60,2));exit;
if(round(abs($currentTime - $endTime) / 60,2) > 10){
echo false;
}else{
echo true;
}
?>
如果当前时间超过10 min
,我需要从给定的日期时间开始返回false,但它始终显示true
。
答案 0 :(得分:0)
我不会谈论代码的逻辑。
但您的代码问题在于计算$currentTime
var。
$currentTime = strtotime(date("d-m-Y H:i:s A"));
它什么都不返回!因为strtotime
中使用的模式不好。
你必须使用它:
$currentTime = strtotime(date("d-m-Y h:i:s A"));
或者这个:
$currentTime = strtotime(date("d-m-Y H:i:s"));
在$currentTime
var。
答案 1 :(得分:0)
您的代码无法正常工作的原因是因为strtotime
不喜欢您的日期格式为d-m-Y H:i:s A
这一事实。它不是这样的原因是因为你有24小时版本的小时和am / pm子午线指示器。没有&#34; 15:00 PM&#34;就strtotime
而言。以下任一项都将为您提供所需的日期时间整数:
$currentTime = strtotime(date("d-m-Y h:i:s A")); // 07-02-2018 06:24:49 PM
或
$currentTime = strtotime(date("d-m-Y H:i:s")); // 07-02-2018 18:28:42
或者,如果您只需要将当前时间作为整数,则可以完全避免使用:
$currentTime = time();
可替换地:
您可以使用PHP内置的DateTime
对象
$added_date= "31-01-2018 12:46 PM";
$endTime = DateTime::createFromFormat('d-m-Y H:i A', $added_date);
$endTime->modify("+10 minutes");
$currentTime = new DateTime();
$time_diff = $currentTime->diff($endTime, 1);
if ($time_diff->i > 10 ) {
echo "true" . PHP_EOL;
} else if ( $time_diff->i == 10 && $time_diff->s > 0) {
echo "true" . PHP_EOL;
} else {
echo "false" . PHP_EOL;
}
请注意,DateTime::diff
会返回DateInterval
个对象,您可以通过该对象访问不同单位的差异。