Freelancer's Playground! New knowledges every now and then

7Dec/0718

Kemarin tanggal berapa ya?

Kerja hari ini saya dihadapkan pada problem tanggal. Ceritanya, ada script yang harus diperbaiki. Karena metode yang digunakan berbeda dengan sebelumnya, akhirnya saya harus bermain-main dengan tanggal, atau lebih spesifik lagi, tanggal kemarin. Dari dulu, yang ada dikepala saya, kalau mengambil tanggal kemarin di PHP itu adalah mengambil dari fungsi mktime() yang dikombinasikan dengan date():

<?php $yesterday = date("Y-m-d", mktime(0,0,0,date("m"), date("d")-1, date("Y"))); ?>

Tapi, ada tapi-nya nih... Hari ini pikiran saya susah sekali untuk diajak kompromi, jadi saya sama sekali lupa pada metode simple diatas dan re-invent the whell. Sampai akhirnya saya menemukan bahwa untuk mendapatkan tanggal kemarin bisa dengan kode seperti berikut:

<?php $yesterday = date('Y-m-d', (strtotime($today) - (24*60*60))); ?>

Yang dioptimize menjadi:

<?php $yesterday = date('Y-m-d', (strtotime($today) - (86400))); ?>

. Tapi aneh, sampai disini saya tiba2 ingat metode pertama yang menimbulkan niat untuk menguji performa diantara metode tersebut, mana yang paling cepat.

Kemudian saya membuat script benchmark sederhana:

<?php
$total = 100000;
$today = date('Y-m-d');
$start1 = microtime(true);
for($i = 1; $i <= $total; $i++){
        $yesterday = date("Y-m-d", mktime(0,0,0,date("m"), date("d")-1, date("Y")));
        //$yesterday = date('Y-m-d', strtotime('-1 day', strtotime($today)));
}
$end1 = microtime(true);
//echo "$start1 - $end1\n";
$time1 = $end1 - $start1;

$start2 = microtime(true);
for($i = 1; $i <= $total; $i++){
        $yesterday = date('Y-m-d', (strtotime($today) - (86400)));
}
$end2 = microtime(true);
//echo "$start2 - $end2\n";
$time2 = $end2 - $start2;

echo "Benchmark $total times.\n";
echo "Method 1: $time1\n";
echo "Method 2: $time2\n";
//echo "\n";
//echo "\n";
?>

Hasil yang didapat cukup membuat saya kaget. Ternyata ada gunanya juga sedikit pikun :) ). Sebab, metode kedua mampu meningkatkan performa berkali lipat. Berikut output setelah 3 kali menjalankan script benchmark:

Benchmark 100000 times.
Method 1: 27.5039460659
Method 2: 9.91087913513

Benchmark 100000 times.
Method 1: 25.8903188705
Method 2: 9.55417895317

Benchmark 100000 times.
Method 1: 36.927713871
Method 2: 14.1359829903

Dari sini bisa dilihatkan kalau metode kedua ternyata lebih cepat. Jadi, kalau lain waktu butuh metode untuk mengetahui tanggal kemarin, pergunakanlah metode kedua. Kalo ada yang lebih cepat lagi, kasih kabar ya!!!

  • http://ferdianto.com/ ferdhie

    coba ini:
    $yesterday = date(‘Y-m-d’, strtotime(‘-1 day’));

  • http://ferdianto.com ferdhie

    coba ini:
    $yesterday = date(‘Y-m-d’, strtotime(‘-1 day’));

  • http://bayu.freelancer.web.id/ ariefbayu

    #ferdie:result:

    Method 1: 18.7917850018
    Method 2: 16.0440161228

    Method 1: 12.9420318604
    Method 2: 12.0222570896

    Method 1: 10.4257769585
    Method 2: 10.4421079159

    Method 1: 15.8907799721
    Method 2: 13.8152439594

    Sepertinya masih lebih cepet punyaku.
    Mungkin karena deklarasi $today ada diluar looping.

  • http://bayu.freelancer.web.id Arief Bayu Purwanto

    #ferdie:result:

    Method 1: 18.7917850018
    Method 2: 16.0440161228
    
    Method 1: 12.9420318604
    Method 2: 12.0222570896
    
    Method 1: 10.4257769585
    Method 2: 10.4421079159
    
    Method 1: 15.8907799721
    Method 2: 13.8152439594

    Sepertinya masih lebih cepet punyaku.
    Mungkin karena deklarasi $today ada diluar looping.

  • http://alcapone.awardspace.com/alcapone waoneleven

    salam kenal bisa sharing about php and etc

  • http://alcapone.awardspace.com/alcapone waoneleven

    salam kenal bisa sharing about php and etc

  • http://adams.web.id/ adams

    minum gibol** biar ga cepet pikun :P

  • http://adams.web.id adams

    minum gibol** biar ga cepet pikun :P

  • http://kriwil.com/ aldi

    kenapa gak pake $today = time();?
    jadi gak usah pake strtotime lagi di loopnya.

  • http://kriwil.com aldi

    kenapa gak pake $today = time();?
    jadi gak usah pake strtotime lagi di loopnya.

  • http://riyogarta.com/ Riyogarta

    Kalau begitu, bagaimana jika strtotime(’-1 day’) -nya dimasukan ke variable terlebih dahulu?
    Jadi:

    $var=strtotime(’-1 day’);
    for …..
    $yesterday = date(’Y-m-d’, $var );

  • http://riyogarta.com Riyogarta

    Kalau begitu, bagaimana jika strtotime(’-1 day’) -nya dimasukan ke variable terlebih dahulu?
    Jadi:

    $var=strtotime(’-1 day’);
    for …..
    $yesterday = date(’Y-m-d’, $var );

  • http://ferdianto.com/ ferdhie

    klo yg ini?
    $yesterday = date(‘Y-m-d’, time() – 86400);

  • http://ferdianto.com ferdhie

    klo yg ini?
    $yesterday = date(‘Y-m-d’, time() – 86400);

  • http://bayu.freelancer.web.id/ ariefbayu

    #ferdie:paten kang!!!
    3 kali test, hasilnya selalu lebih cepat 2x.

    test #1:
    Method 4: 0.953221797943
    Method 5: 1.99843788147
    test #2:
    Method 4: 0.545427799225
    Method 5: 0.969621896744
    test #3:
    Method 4: 0.579589128494
    Method 5: 1.19139289856

    Method 5 itu punya saya.

  • http://bayu.freelancer.web.id Arief Bayu Purwanto

    #ferdie:paten kang!!!
    3 kali test, hasilnya selalu lebih cepat 2x.

    test #1:
    Method 4: 0.953221797943
    Method 5: 1.99843788147
    test #2:
    Method 4: 0.545427799225
    Method 5: 0.969621896744
    test #3:
    Method 4: 0.579589128494
    Method 5: 1.19139289856

    Method 5 itu punya saya.

  • http://www.hilman.web.id/ anton

    makasih mas, mohon izin kopi paste

  • http://www.hilman.web.id anton

    makasih mas, mohon izin kopi paste