Ben benziyor MYSQL bir datetime getiriliyor ediyorum:
2010-08-11 11:18:28
Ben "zemin" ya da başka bir işlev için milisaniye cinsinden ilk 15 dakikalık aralıklarla ve çıktı haline dönüştürmek gerekir.
Yani, bu durumda olurdu:
2010-08-11 milisaniye 11:15:00
Tüh! Maalesef - açıklamak gerekir - Ben php İÇİNDE milisaniye haline dönüştürecek kodu gerekir!
Doing a timing test revealed the following:
$time_start = microtime(true);
for($i=0;$i<10000;$i++)
floor(strtotime('2010-08-11 23:59:59')/(60*15))*60*15*1000;
$time_end = microtime(true);
echo 'time taken = '.($time_end - $time_start);
time taken = 21.440743207932
$time_start = microtime(true);
for($i=0;$i<10000;$i++)
strtotime('2010-08-11 23:59:59')-(strtotime('2010-08-11 23:59:59') % 900);
$time_end = microtime(true);
echo 'time taken = '.($time_end - $time_start);
time taken = 39.597450017929
$time_start = microtime(true);
for($i=0;$i<10000;$i++)
bcmul((strtotime('2010-08-11 23:59:59')-(strtotime('2010-08-11 23:59:59') % 900)), 1000);
$time_end = microtime(true);
echo 'time taken = '.($time_end - $time_start);
time taken = 42.297260046005
$time_start = microtime(true);
for($i=0;$i<10000;$i++)
floor(strtotime('2010-08-11 23:59:59')/(900))*900000;
$time_end = microtime(true);
echo 'time taken = '.($time_end - $time_start);
time taken = 20.687357902527
time taken = 19.32729101181
time taken = 19.938629150391
Bu strtotime () işlevi yavaş biridir ve biz muhtemelen onun gerekli her zaman için çift kullanmaktan kaçınmak gerektiğini görünür. Timetaken (60 * 15)! = Timetaken (900) bir sürpriz biraz oldu ...