Milisaniye cinsinden ilk 15 dakikalık aralıklarla (PHP) bir MYSQL datetime yuvarlama

0 Cevap php

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 ...

0 Cevap