| TCH (statz) | ![]() #1, Főfasz (10579) |
2551 | #1fd9 | ^ | Idézet | Mon, 03 Sep 2012 21:27:52 +02 |
| 31.46.*.* |
|
*.catv.pool.telekom.hu |
XDDD Te, ezt én nem értem ám, mondom, hogy az én japántudásom kimerül ebben az egy szóban. :P Ma Mcloaddal basztattuk egy kicsit a PHP időfüggvényeit. Azon morfondíroztunk, hogy hogy célszerű a mai nap kezdetét (ma 0:00) előhívni. Erre a PHP-ban van a strtotime("Today"), ami ezt visszaadja. Nekem viszont valami azt súgta, hogy egy stringparser csak lassab már, mint egy aritmetikai művelet. Én ezzel az ötlettel álltam elő: time() - (time() % 86400)). Amikor kipróbáltuk, két óra eltolást észleltünk a timestampban. Nem értettük, hogy miért, de végül az lett a tipp, hogy mivel a PHP Greenichhez képest számítgatja át mindig a timestampot, ezért a GMT eltolást mindig ki kell vonni. Persze lehet, hogy hülyék vagyunk; valaki elmagyarázza, mitmiért qrtunk el, leülünk magunktól is. :P BTW, közben rájöttünk, hogy ha beállítjuk, hogy date_default_timezone_set('X/Y'); akkor minden időfüggvény kétszeresére gyorsul. A GMT eltolás értékét a date('Z') adja meg. (Ebben benne van a nyári/téli időszámítás is.) Vagyis a modulós kód így néz ki: (time() - (time() % 86400)) - date('Z'); Bencsmárkoljuk a két kódot: <?PHP
$a = 1000000;
date_default_timezone_set('Europe/Budapest');
$t0 = microtime(true);
for ($i = 0; $i < $a; ++$i)
{
$midnight = (time() - (time() % 86400)) - date("Z");
}
$t1 = microtime(true);
for ($i = 0; $i < $a; ++$i)
{
$midnight = strtotime("Today");
}
$t2 = microtime(true);
die('(time() - (time() % 86400)) - date("Z"): <b>'.($t1 - $t0).'</b><br />strtotime("Today"): <b>'.($t2 - $t1).'</b>');
?>Eredmény:Hát így se rossz, viszont, ha nem kéne kivonogatni a GMT eltolást, akkor ez lenne az eredmény: Hát asszem magáért beszél, majdnem 7x gyorsabb a modulós/kivonogatós, mint a strtotime és 4.5-ször gyorsabb, ha nem kell a date('Z')-t kivonnunk. Valaki nem tudja esetleg, mi a francot cseszünk el, mit kéne beállítani, egyáltalán meg lehet oldani így, vagy a GMT-t muszáj kivonni? |