Ich habe Probleme mit der Handhabung eines Datumsformats. In meinem Code versuche ich ein Ablaufdatum ab einem bestimmten Datum zu berechnen und es dann in meiner MySQL-Datenbank zu speichern.Fehler mit Datumsformat in PHP und SQL
Das Problem ist, dass ich diesen Fehler immer erhalten:
Fatal error: Call to a member function add() on a non-object
und ich bin es zu lösen nicht in der Lage. Zum Beispiel funktioniert es, wenn ich manuell $ scadenza_contratto mit einem bestimmten Datum ersetzen, zum Beispiel:
$expiration_date = DateTime::createFromFormat('Y-m-d', '2016-02-10');
In diesem Fall ist es funktioniert, aber ich brauche Zeit von $ scadenza_contratto zu erhalten. Können Sie mir bitte helfen? Dies ist mein Code:
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')");
}
}
}
echo '$ scadenza_contratto' vor zu Verwenden Sie in '$ expiration_date = DateTime :: createFromFormat ('Ym-d', '$ scadenza_contratto');' –
Wenn '$ mese' oder' $ giorno' Werte unter 10 haben (was bei der Behandlung durchaus möglich ist) sie als ganzzahlige Werte und nicht als zwei-Zeichen-Strings), dann muss Ihre Formatmaske "Yn-j" statt "Ym-d'" sein. –
Ich habe versucht, Ymd in Ynj zu ändern, aber es gibt immer noch das Error. –