TCH (statz) | #1, Főfasz (10443) |
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? |