我只有基本的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
,但最终转换在某些情况下总是失败。提前感谢任何提示。
答案 0 :(得分:1)
您获得的错误是因为您输入的字符串不是要转换的strtotime()
函数的有效字符串。
例如2015-08-31
转换就好了,today
,tomorrow
或+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()
将数字向下舍入。完成工作。