PHP和SQL中的日期格式错误


Error with Date format in PHP and SQL

我在处理日期格式时遇到问题。在我的代码中,我试图计算一个从指定日期开始的过期日期,然后将其保存在MySQL数据库中。

问题是我总是收到这个错误:

致命错误:在非对象上调用成员函数add()

我解决不了这个问题。例如,如果我手动将$scadenza_controtto替换为特定日期,例如:

$expiration_date = DateTime::createFromFormat('Y-m-d', '2016-02-10');

在这种情况下,它是有效的,但我需要从$scadenza_controtto收到日期。你能帮我吗?这是我的代码:

if($anno > 0 && $giorno > 0 && $mese >0){
$scadenza_contratto = $anno."-".$mese."-".$giorno;
//$scadenza_contratto = date('Y-m-d', strtotime("+{$scadenze} months", strtotime($scadenza_contratto)));
$sql1 = "SELECT * FROM scadenze WHERE contratto_id=$contratti_id";
$row1 = mysql_fetch_assoc( mysql_query($sql1) );
echo "tipo ".$row1['tipo'];
 if(!$row1){
 for ($m = $scadenze; $m <=60 ; $m += $scadenze){
   //add $m to activation_date
   $scadenza_contratto = $anno."-".$mese."-".$giorno;
   $expiration_date = DateTime::createFromFormat('Y-m-d', '$scadenza_contratto');
   $expiration_date->add(new DateInterval('P'.$m.'M'));
   //do something with $expriration_date 
   echo "Expire: ".$expiration_date->format('Y-m-d'). "<br>";
   $expiration_db = $expiration_date->format('Y-m-d H:i:s');
   $time=time();
//mysql_query("INSERT INTO contratti (nome_area) VALUES('$nome_area','$giorno','$mese','$file_name','$attiva','$id_voce','$nome_azienda','$time')");
  mysql_query("INSERT INTO scadenze (nome_azienda,nome_voce,contratto_id,nome_area,scadenza,tipo,created_date) VALUES ('$nome_azienda','$nome_voce','$contratti_id','$nome_area','$expiration_db','$scadenze','$time')");
  } 
 }
}

第一个问题:

$expiration_date = DateTime::createFromFormat('Y-m-d', '$scadenza_contratto');

您试图将字符串文字'$scadenza_contratto'转换为日期,而不是字符串变量$scadenza_contratto的值。

第二个问题是您的格式掩码,因为您将$mese$giorno的值视为整数,所以它们的值可能小于10;并且您当前的掩码假设它们将始终是两位数(如果小于10,则使用前导0),这可能不是的情况

将其更改为

$expiration_date = DateTime::createFromFormat('Y-n-j', $scadenza_contratto);