很难理解如何在PHP中操作日期和时间

时间:2018-08-07 00:16:11

标签: php mysql math time

我真的不了解如何用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

3 个答案:

答案 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