Autor Zpráva
petoo999
Profil
Zdravim,potrebujem poradit nejakú šikovnu funkciu ktora porovna dva stringy(datum+čas).Jeden čas je čas dokončenia nejakej činnosti a druhý je aktualny čas.Ja potrebujem return ktorý vráti koľko minút zostava k rovnosti časov. $time = '31.08.2012 09:05:32'; // priklad ja to mam z DB Skušal som nasledujuci kod ale potrebol by nejaky cyklus
$date = new DateTime(Date("j.m.Y H:i:s"));
$date->add(new DateInterval('PT0H'.$i.'M'));
$cas = $date->format('j.m.Y H:i:s');
Premenna $i je kolko minut chcem pridať k aktualnemu času.Za všetky rady vopred ďakujem.
Alphard
Profil
http://cz2.php.net/manual/en/datetime.diff.php
Tori
Profil
Když to čtete z DB, tak to můžete počítat i tam: DATEDIFF vrací rozdíl v celých dnech, TIMEDIFF jako HH:MM:SS. Např.:
$sql = "SELECT TIMEDIFF(sloupecek, '" . date('Y-m-d H:i:s') . "') FROM tabulka";
petoo999
Profil
Tori:
TIMEDIFF mi nevrati nic.Navyše použivam Codeigniter a tam mam ine query.Format mam Y.m.d H:i:s
Tori
Profil
petoo999:
Aha, předpokládala jsem, že máte (v DB) datum uložené jako DATETIME, ne řetězec, s tím se samozřejmě TIMEDIFF použít nedá.

Navyše použivam Codeigniter
Na fóru CodeIgniter se dá např. najít funkce, které vrací lokalizovaný řetězec (Před ... dny). Nevím, jestli se dá výstup omezit jen na některé čas.jednotky, tady se asi postupně probírá zdroják té funkce, takže si můžete kdyžtak upravit. (mezi prvními pěti výsledky googlem na "codeigniter time difference")
petoo999
Profil
No takže moje finálne riešenie je asi takáto funkcia do codeigniter-a.Vracia mi to počet minút do rovnosti časov.
function get_progress($action,$uid = false){
$ci =& get_instance();
if (!$uid = uid()) return FALSE;
 $query = $ci->db->select('time');
$query = $ci->db->where('user_id',$uid);
$query = $ci->db->where('action',$action);
$query = $ci->db->get('casomiera');
if ($query->num_rows() > 0)$time =  $query->row()->time;
else return false;
$c = strtotime($time);
$newformat = date('j.m.Y H:i:s',$c);

    $date1 = new DateTime($newformat); 
    $date2 = new DateTime(mydate()); 
    $interval = $date1->diff($date2); 
 
    $days = $interval->format('%d'); 
    $hours = $interval->format('%H'); 
    $minutes = $interval->format('%i'); 
    
    if($days != 0){
    $days = $days * 24 * 60;    
    }
    if($hours != 0){
    $hours = $hours * 60;    
    }
    return $minutes + $hours + $days; 
}

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: