我真的不了解如何用PHP格式化日期和时间以用于数学方程式。我的目标是
从数据库获取日期和时间;
// Get array for times in
$sth = mysqli_query($conn,"SELECT * FROM ledger ORDER BY ID");
$timeins = array();
while($r = mysqli_fetch_assoc($sth)) {
$timeins[] = $r["timein"];
//OR
array_push($timeins, $r['timein']);
}
然后找到当前时间与数组变量$ timeins [0]之间的距离,然后将分钟,小时和天的差异放在单独的简单变量中,以备后用。这些变量将在if语句中单独使用,以查明该人是否已经过了一定的时间。
edit:从数据库返回的日期格式为MySQL的默认TIMESTAMP格式。例如。 2018-08-06 17:38:37
答案 0 :(得分:0)
还可以在SQL中执行日期时间操作,以获取两个日期时间/时间戳值之间的差异(以天,小时,分钟为单位...)。我们可以使用SELECT列表中的表达式,将结果作为列中的列返回结果集。
放弃SELECT *
模式,并指定我们需要返回的表达式的显式列表:
$sql = "
SELECT t.id
, t.timein
, TIMESTAMPDIFF(DAY ,t.timein,NOW()) AS diff_days
, TIMESTAMPDIFF(HOUR ,t.timein,NOW()) AS diff_hours
, TIMESTAMPDIFF(MINUTE ,t.timein,NOW()) AS diff_minute
FROM ledger t
ORDER BY t.id ";
if( $sth = mysqli_query($conn,$sql) ) {
// execution successful
...
} else {
// handle sql error
}
答案 1 :(得分:0)
您应该使用PHP中的DateTime类来进行任何日期操作。您可以使用
将MySQL格式时间的字符串表示形式转换为PHP DateTime对象。$date = DateTime::createFromFormat('Y-m-d H:i:s', $mysqldate);
还可以使用不带参数的构造函数创建一个代表当前时间的DateTime对象:
$now = new DateTime();
要获取两个日期之间的差值作为DateInterval对象,请使用内置的diff方法:
$diff = $now->diff($date);
作为一个完整的例子:
$now = new DateTime();
$mysqldate = '2018-04-03 12:30:01';
$date = DateTime::createFromFormat('Y-m-d H:i:s', $mysqldate);
$diff = $now->diff($date);
$diff_days = (int)$diff->format('%a');
$diff_hours = $diff->h;
$diff_minutes = $diff->m;
echo "$diff_days days, $diff_hours hours, $diff_minutes minutes";
输出:
125 days, 9 hours, 4 minutes
请注意,您必须使用$diff->format('%a')
而不是$diff->d
来获取两个日期之间的日期,因为$diff->d
将不包括两个日期之间的任何月份中的日期(在此情况下,例如它将在今天(8月6日)返回3。
答案 2 :(得分:-1)
在php中使用DateTime类是获得准确结果的最佳方法。
$dateNow = new DateTime('now');
$dateIn = DateTime::createFromFormat('d-m-Y H:i:s', $timeins[0]);
$interval = $dateNow->diff($dateIn);
echo $interval->format('%d days, %h hours, %i minutes, %s seconds');
$deltaDays = $interval->d;
$deltaHours = $interval->h;
...
您必须确保您的数据库日期的输入格式正确,在这种情况下,我假设使用dmy H:i:s,然后您也可以按所需的任何格式输出,如date docs中所示:http://php.net/manual/en/function.date.php