很难理解如何在php中操纵日期和时间

6ss1mwsb  于 2021-06-23  发布在  Mysql
关注(0)|答案(3)|浏览(320)

我真的不明白日期和时间是如何在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:从db返回的日期格式是mysql的默认时间戳格式。e、 g.2018-08-06 17:38:37。

cig3rfwq

cig3rfwq1#

也可以在sql中执行datetime操作,以获取两个datetime/时间戳值(以天、小时、分钟为单位)之间的差异。。。我们可以使用select列表中的表达式,将结果作为resultset中的列返回。
抛弃 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
}
jjjwad0x

jjjwad0x2#

您应该使用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 将不包括这两个日期之间任何月份的天数(在本例中,它将返回3,表示今天是8月6日)。

wztqucjr

wztqucjr3#

在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;
...

您必须确保db date的输入格式是正确的,在这种情况下,我假设d-m-y h:i:s,然后您也可以以您需要的任何格式输出,如日期文档中所示:http://php.net/manual/en/function.date.php

相关问题