2016-06-25 6 views
1

ich diesen Code bin mit:PHP konvertieren DateInterval in int

$due_date = new DateTime($_POST['due_date']); 

$today = new DateTime(); 
$months = $due_date->diff($today); 

$months->format("%m"); 

$fine = 0.02 * $price * $months; // i got error in this line 

$bill = $price + $fine; 

Ich möchte berechnen, wenn jemand zu spät ist zu zahlen, dann werden sie pro Monat bestraft werden. Und die Fehlermeldung lautet:

+3

Sie nie etwas mit dem Rückgabewert von do [ '$ Monate-> Format ("% m");'] (http://php.net /manual/de/dateinterval.format.php). – PeeHaa

+0

'$ months' ist ein Objekt für Datum und Uhrzeit Hier ist ein Beispiel eines ...' DateInterval ( [y] => 0 [m] => 4 [d] => 12 [h] => 6 Object [i] => 56 [s] => 9 [Wochentag] => 0 [weekday_behavior] => 0 [first_last_day_of] => 0 [invert] => 0 [Tage] => 133 [special_type] => 0 [special_amount] => 0 [have_weekday_relative] => 0 [have_special_relative] => 0 ) '' $ –

Antwort

1

Die Fehlermeldung erscheint, weil $months kein int, sondern ein Datetime-Objekt wie dieses:

DateInterval Object 
(
    [y] => 0 
    [m] => 4 
    [d] => 12 
    [h] => 6 
    [i] => 56 
    [s] => 9 
    [weekday] => 0 
    [weekday_behavior] => 0 
    [first_last_day_of] => 0 
    [invert] => 0 
    [days] => 133 
    [special_type] => 0 
    [special_amount] => 0 
    [have_weekday_relative] => 0 
    [have_special_relative] => 0 
) 

Sie können den ganzzahligen Wert von Monaten erhalten wie folgt

$due_date = new DateTime('13-02-2016'); 

$today = new DateTime(); 
$months = $due_date->diff($today); 

echo $months->m; 

Überprüfen Sie das obige Ergebnis in PHP Sandbox

Also im Grunde wird Ihr Code aussehen

$due_date = new DateTime($_POST['due_date']); 

$today = new DateTime(); 
$months = $due_date->diff($today); 

$fine = 0.02 * $price * $months->m; // i got no error in this line 

$bill = $price + $fine; 
+0

sollten Sie wahrscheinlich das 'Format' dann entfernen, wenn Sie es nicht verwenden werden ... – Pevara

+0

@Pevara danke,' Format' wurde es in dieser Antwort nicht benötigt –

1

Sie berechnen den Unterschied in Monaten, aber Sie verwenden diesen Wert nie tatsächlich. Die Methode format gibt etwas aus, ändert jedoch nicht das tatsächliche DateInterval.

Probieren Sie es wie folgt aus:

$due_date = new DateTime($_POST['due_date']); 

$today = new DateTime(); 
$diff = $due_date->diff($today); 

$months = $diff->format("%m"); 

$fine = 0.02 * $price * $months; 

$bill = $price + $fine; 
+0

Monate = $ due_date-> diff ($ heute) -> Format ("% m "));' – splash58

+0

@ splash58 Sicher, oder '$ months = (neue DateTime ($ _ POST ['Fälligkeitsdatum'])) -> diff (new DateTime()) -> format ("% m ");' .. Ich habe nur versucht, auf die 'diff'erence;) aufmerksam zu machen. – Pevara

+0

Das funktioniert nicht in allen Versionen von php – splash58