2016-06-06 10 views
-1

Ich habe die folgende FunktionECHO 0 Datum, wenn der Betrag minus wird

function get_designment_info_by_id($id) { 
    $this->db->where('designment_id', $id); 
    $designment_info = $this->db->get('designments')->row_array(); 
    $designment_info['image'] = self::get_image_for_designment($id); 
    $designment_info['count_joined'] = self::get_users_count_joined_by_id($id); 
    $designment_info['count_ideas'] = self::get_users_count_ideas_by_id($id); 
    $date_to = $designment_info['date_to']; 
     $diff = $date_to - now(); 
     $days = round($diff/86400); 
     $time_left = $days . ' days'; 



     $designment_info['time_left'] = $time_left; 
    return $designment_info; 
} 

nun in der Ansicht, wenn das Datum wird es zeigen bestanden hat, wie viele Tage das Datum abgelaufen ist. Zum Beispiel, wenn die Frist war 02-06-16 zeigt es "-4 Tage" wie kann ich die Funktion ändern es wird nur eine Null "0" Echo, wenn die Frist abgelaufen ist.

Antwort

0

Überprüfen Sie, ob es vor der Zuweisung negativ ist, und löschen Sie es dann, wenn dies der Fall ist.

$days = round($diff/86400); 
if ($days < 0) $days = 0; 
$time_left = $days . ' days'; 
0

Fügen Sie einfach ein, wenn die Bedingung

function get_designment_info_by_id($id) { 
    $this->db->where('designment_id', $id); 
    $designment_info = $this->db->get('designments')->row_array(); 
    $designment_info['image'] = self::get_image_for_designment($id); 
    $designment_info['count_joined'] = self::get_users_count_joined_by_id($id); 
    $designment_info['count_ideas'] = self::get_users_count_ideas_by_id($id); 
    $date_to = $designment_info['date_to']; 
    $diff = $date_to - now(); 
    $days = round($diff/86400); 
    // Add this 
    if($days < 0){ 
     $days = 0; 
    } 
    $time_left = $days . ' days'; 



    $designment_info['time_left'] = $time_left; 
    return $designment_info; 
} 
+0

'$ time_left' ist ein String –

+0

@JeffPuckettII Ich habe das gefunden. meine Antwort bearbeitet. Vielen Dank! – weigreen

0

Immer wenn Datetime die magische Zahl unter Verwendung manipuliert wird 86400 besteht generell ein Risiko unerwünschter DST Störung ist. Um dies vollständig zu vermeiden, habe ich einen Prozess unter Verwendung von DateTime ohne Nutzung von 86400 geschrieben.

// assumes $designment_info['date_to'] is formatted d-m-y from question 
$date_to=DateTime::createFromFormat('d-m-y',$designment_info['date_to']); 
$date_now=new DateTime("now"); 
if($date_to<=$date_now){ 
    echo "0 days"; // not yet passed 
}else{ 
    $passed=$date_to->diff($date_now)->days; 
    echo "$passed day",($passed>1?"s":""); // add plural when needed 
} 

Hier ist ein online demo die $date_to nach wie vor gleich, und nach $date_now zeigt. (... für heute jedenfalls)

+0

@sterrek Wenn meine Antwort Ihre Frage erfüllt, vergeben Sie bitte das grüne Häkchen, damit Ihre Frage aus der unbeantworteten Fragenliste entfernt wird. (Wenn Sie es hilfreich finden, können Sie es gerne aufwerten;)) – mickmackusa