我在处理日期格式时遇到问题。 在我的代码中,我尝试计算从指定日期开始的到期日期,然后将其保存在我的 MySQL 数据库中。
问题是我总是收到这个错误:
Fatal error: Call to a member function add() on a non-object
我无法解决它。 例如,如果我手动将 $scadenza_contratto 替换为特定日期,它会起作用,例如:
$expiration_date = DateTime::createFromFormat('Y-m-d', '2016-02-10');
在这种情况下,它可以工作,但我需要从 $scadenza_contratto 接收日期。 你能帮我吗? 这是我的代码:
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);
关于php - PHP 和 SQL 中的日期格式错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36519068/