PHP Date to String来比较日期

时间:2015-08-13 08:54:58

标签: php mysql string date compare

我只有基本的PHP知识,我使用PHP + Mysql并尝试检查两个日期之间的天数差异;第一个日期由我自己在脚本中格式化为字符串:

$f_entrega=$_POST['year1']."-".$_POST['month1']."-".$_POST['day1'];

导致问题的第二个日期($f_dock)来自mysql数据库,该列是DATE格式的。要比较日期,我会执行以下操作:

if(!empty($_POST["id"])){
    $f_entrega=$_POST['f_entrega_a']."-".$_POST['f_entrega_m']."-".$_POST['f_entrega_d'];
    $f_entr=$f_entrega;
    $mysqli=conectar();
    $resultado = $mysqli->query("SELECT id,f_dock FROM pt");
    $row = $resultado->fetch_assoc();
    for ($i=0;$i<count($ids);$i++){
        do{
            if ($ids[$i]==$row["id"]){
                $f_dock=$row["f_dock"];
                break;
            }
        } while ($row = $resultado->fetch_assoc());     
        $error=0;
        var_dump($f_dock);
        $f_dock=strtotime($f_dock);
        $f_dock=date('Ymd',$f_dock);
        $f_entrega=$f_entr;
        $f_entrega=strtotime($f_entrega);
        $f_entrega=date('Ymd',$f_entrega);
        $f_dock=DateTime::createFromFormat('Ymd',$f_dock);
        $f_entrega=DateTime::createFromFormat('Ymd',$f_entrega);
        $dias_vendor=date_diff($f_dock,$f_entrega);
        $tat=$dias_vendor->format('%R%a');

有时它可以正常工作,但有时候我会收到警告:strtotime()期望参数1为字符串,[第一行]中给出的对象和$ tat未正确计算并且具有奇怪的值。 我之前尝试过不同的解决方案,例如$f_dock=(string)$f_dock,但最终转换在某些情况下总是失败。提前感谢任何提示。

1 个答案:

答案 0 :(得分:1)

您获得的错误是因为您输入的字符串不是要转换的strtotime()函数的有效字符串。

例如2015-08-31转换就好了,todaytomorrow+7 days也是如此。

要获得更具体的帮助,您需要告诉我们$f_dock的价值是什么(正如Marcos在评论中所说,var_dump($f_dock)会得到这个)。

然而,解决方案:

$date1 = strtotime($f_dock); //timestamp in seconds
$date2 = strtotime($f_entrega); //same for the second date
$difference = $date1 - $date2; //difference in seconds between the dates
$days = floor($difference/86400); 

86400是一天中的秒数,因此请查看有多少秒差异,然后查看其中有多少天值,并使用floor()将数字向下舍入。完成工作。