mysql数据库中的Datetime列在PHP中显示为String


Datetime column from mysql database is shown as String in PHP

我使用了一些数组p1、p2。他们的第三个参数是从mysql数据库中获取的日期时间。当我试图找出这些日期时间之间的差异时,会出现一条警告:Warning: date_diff() expects parameter 1 to be DateTimeInterface, string given in ...

这是代码:

    $format = "Y-m-d H:m:s";
    $t1 = strtotime($p1[2]);
    $time1 = date($format,$t1);
    $t2 = strtotime($p2[2]);
    $time2 = date($format,$t2);
    $diff = date_diff($time1, $time2);

新编辑这就是我从数据库获取日期时间的方式:

$temp=array();
foreach ($arr_smp as $column => $context) {
if($column == "latitude" || $column == "longitude" || $column == "date_time")
{
    array_push($temp,$context);
}

其中$context是lat或lon或date_time

你能帮忙吗?提前感谢!

如错误所述,您还将来自数据库表的值写入字符串。因此,您需要将它们转换为DateTime()对象,然后获得差异。请看一下:-

<?php
    $p1[2] = "2015-10-10"; // i assume that $p1[2] is like this
    $p2[2] = "2015-10-12"; // i assume that $p2[2] is like this
    $t1 = new DateTime($p1[2]); //conversion into date-time object
    $t2 = new DateTime($p2[2]); //conversion into date-time object
    $diff = date_diff($t1, $t2); // get difference
    echo "<pre/>";print_r($diff); // print difference
?>

输出:-https://eval.in/388744

此代码有一些错误,首先您的格式无效:

$format = "Y-m-d H:m:s";

表示小时、月和秒,如果你在分钟之后,你需要以下内容(你可以将此归咎于月和分钟):

$format = "Y-m-d H:i:s";

第二个问题是date_diff不接受字符串作为输入,所以你的错误也与你提供的参数相关

$dateOne = new Datetime($p1[2]);
$dateTwo = new Datetime($p2[2]);
$dateDiff = $dateOne->diff($dateTwo);
var_dump($dateDiff);

然后,您可以使用日期差异对象来查找日期差异值。

享受吧。

必须使用datetime而不是date