2017-01-03 4 views
0

In Php Controller Code 'date_added' ist bereits da und ich habe 'date_sla' für das aktuelle Datum erstellt. In meinem Out-Put einzeln funktionieren beide gut, aber wenn ich den Unterschied zu berechnen, ist das Ergebnis in Ordnung innerhalb des Monats. wenn Monat ändert es negative Zahlen wie (2017.03.01) zeigt - (31-12-2016) = -28 TagePhp Timestamp zeigt negative Werte bei Monatswechsel

foreach ($results as $result) { 
    $action = array(); 

    $action[] = array(
       'text' => $this->language->get('text_view'), 
       'href' => $this->url->link('sale/order/info', 'token=' . $this->session->data['token'] . '&order_id=' . $result['order_id'] . $url, 'SSL') 
      ); 

    if (strtotime($result['date_added']) > strtotime('-' . (int)$this->config->get('config_order_edit') . ' day')) { 
     $action[] = array(
        'text' => $this->language->get('text_edit'), 
        'href' => $this->url->link('sale/order/update', 'token=' . $this->session->data['token'] . '&order_id=' . $result['order_id'] . $url, 'SSL') 
       ); 
    } 

    $this->data['orders'][] = array(
       'order_id'  => $result['order_id'], 
       'customer'  => $result['customer'], 
       'status'  => $result['status'], 
       'total'   => $this->currency->format($result['total'], $result['currency_code'], $result['currency_value']), 
       'date_added' => date($this->language->get('date_format_short'), strtotime($result['date_added'])), 
       'date_sla' => date($this->language->get('date_format_short'), time()), 
       'date_modified' => date($this->language->get('date_format_short'), strtotime($result['date_modified'])), 
       'selected'  => isset($this->request->post['selected']) && in_array($result['order_id'], $this->request->post['selected']), 
       'action'  => $action 
      ); 
} 

Html-Code

<td class="right"><?php echo $order['date_sla'] - $order['date_added']." days";?></td> 
+1

Welcher Teil von Ihnen dachte, dass eine Subtraktion auf 2 Saiten jemals eine gute Idee wäre. Sie erhalten 28 von dieser Subtraktion, weil '3 - 31 '' -28 'ist. Wenn Sie Mathe für Strings ausführen, wird die Zeichenkette in eine Zahl umgewandelt, bis sie einen nicht numerischen Wert (dh das erste Leerzeichen oder' -') in der Zeichenkette findet daher '3 - 31' – RiggsFolly

+1

Ich vermute auch, dass Sie die Daten als TEXT oder VARCHAR in Ihrer Datenbank gespeichert haben. Starten Sie erneut und verwenden Sie DATETIME- oder TIMESTAMP-Datentypen für Datum und Uhrzeit. Nur bei Bedarf in eine Zeichenfolge in der Präsentationsebene konvertieren – RiggsFolly

+0

Ich habe Ihren Standpunkt verstanden. vielleicht habe ich diesen $ order ['date_sla'] an falscher Stelle erstellt. gib mir etwas Zeit, ich werde es noch einmal überprüfen. Und es macht mir nichts aus, wenn irgendwelche dummen Fehler von mir gemacht werden. Ich bin Anfänger in PHP. Danke für Ihre Hilfe. –

Antwort

4

Zuerst wird die $order['date_sla'] und $order['date_added'] Echo und sehen, was es druckt, wenn sie das Datum des Formats wie erwähnt in Ihrem Satz (2017.03.01) dann so versuchen:

$d1 = new DateTime('3-1-2017'); 
$d2 = new DateTime('31-12-2016'); 
$difference = $d2->diff($d1); 
echo $difference->format('%r%a days');// 3 days 

BEISPIEL fÜR IHR DATUM FORMAT FRO M Bild:

$t=explode("-",'03/01/2017 - 05:23:23 AM');//replace 03/01/2017 - 05:23:23 AM with your variable $order['date_sla'] like $t=explode("-",$order['date_sla']); 
$str=str_replace("/", "-", $t[0]); 
$t1=explode("-",'31/12/2016 - 05:23:23 AM');//replace 03/01/2017 - 05:23:23 AM with your variable $order['date_added' like $t=explode("-",$order['date_added'); 
$str1=str_replace("/", "-",$t1[0]); 

$d1 = new DateTime($str); 
$d2 = new DateTime($str1); 
$difference = $d2->diff($d1); 
echo $difference->format('%r%a days');// 3 days 
+0

Beide zeigen gute Ergebnisse –

+0

@ImmranMohammed sollten Sie die Ausgabe posten. Ich nehme an, Sie haben 'Zahlen' und nicht 'Datum/DatumZeit'-String in diesem Fall, wenn Sie' 3-31' subtrahieren, ist offensichtlich, um '-28' zu bekommen. Sie müssen den vollen "date" oder "datetime" -Wert von "db" bekommen, so wie ich geschrieben habe. –

+0

einen Screenshot hinzugefügt –