Minggu, 15 Januari 2012

Ekspresi Reguler untuk Konversi Format Tanggal dari MySQL Ke PHP

Selamat siang...
Teringat ucapan senior yang bernama alias Mas kuthux, "agar tidak lupa ketika belajar sesuatu tulis saja di blog" maka saya berniat post disini. Kali ini mengenai ekspresi reguler.

Waktu pertama kali belajar pemrograman dengan MySQl dan PHP, seringkali mendapat masalah sepele, yaitu ketika mempunyai data yang berype DATE atau DATETIME di MySQL yang biasanya memiliki format YYYY-MM-DD untuk DATE, dan YYYY-MM-DD HH:MM:SS untuk DATETIME, dan ketika dioutput pakai PHP kita harus ngutak-atik formatnya agar menjadi standar bahasa Indonesia, misal menjadi MM-DD-YYYY, Jam  HH:MM WIB.

Contoh tanggal 15-01-2012, Jam 12.50 biasanya disimpan di MySQL dalam Format DATETIME:

2012-01-15 12:50:00

Nah untuk menampilkan menjadi format misal:

15-01-2012, Jam 12:50 WIB


Dahulu saya menggunakan cara pemrograman klasik, dengan memotong substring menggunakan fungsi substr pada PHP:



Sehingga, kode PHP untuk mendapatkan menampilkan format tanggal yg diinginkan adalah:

<?php 
echo substr($date_sql,8,2)."-".substr($date_sql,5,2)."-".substr($date_sql,0,4).", Jam ".substr($date_sql,11,5)." WIB";
?>

Cara radikal, namun berhasil dan mudah dipahami ^^V


Sekarang untuk melakukan format tersebut, bisa menggunakan cara yang lebih modern yaitu pakai Ekspresi Reguler, mendengarnya saja sudah terlihat keren kan, hahaha. Paling tidak biar ilmu pemrograman kita sedikit lebih maju lah, daripada cara-cara lama.

Langsung saja untuk merubah menjadi menjadi format tadi bisa menggunakan ekspresi reguler berikut:

<?php 
$date_sql = "2012-01-15 12:50:00";
  
$pola   = "/^(\d+)-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2})$/";
$pengganti  = "$3-$2-$1, Jam $4:$5 WIB";
 
echo preg_replace($pola,$pengganti,$date_sql);
?>


Disitu saya memakai fungsi preg_replace dari PHP, yang memiliki kegunaan untuk mendapatkan string dengan bagian yang kita ganti menggunakan ekspresi reguler. Pola (pattern) ekspresi reguler yang saya gunakan di atas adalah

/^(\d+)-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2})$/

dimana itu adalah pattern format DATETIME dari MySQL.
Penjelasan simbol2 ekspresi reguler yang saya gunakan adalah sbb:

/^       : / menandakan awal atau akhir suatu pattern ekspresi reguler
           ^ menandakan pengecekan pola hanya pada awal string
(\d+)    : \d berarti karakter angka [0-9] dan + adalah jumlah karakter >1
           diapit ( ) untuk menandai sebuah group
           ini saya gunakan untuk pola tahun YYYY pada DATETIME karena tahun 
           hanya boleh angka dan biasanya dalam mysql ada 4 digit, 
           disini saya pakai >1 karena siapa tahu ada tahun 3 [satu digit tahun], 
           10000 [empat digit tahun], 222222 dst.
  -      : pemisah tahun dengan bulan pada format DATETIME mySQL
(\d+{2}) : pola bulan MM, karena bulan sudah pasti DUA DIGIT ANGKA 
           \d artinya karakter numerik dan {2} artinya dua digit --> ada 2 digit   
           karakter numerik pada MM

dan selanjutnya penjelasannya kurang lebih sama

$/       : $ menandakan akhir suatu string, jadi kalau diapit tanda /^ [pola] $/ 
           [pola] pengecekan diterapkan pada string penuh dari awal sampai akhir (bukan sebagian)

Kemudian untuk pengganti di situ saya gunakan

$3-$2-$1, Jam $4:$5 WIB

Pada pengganti, $1 $2 itu menandakan group string yang ada pada pola, group adalah sesuatu yang diapit ( ) pada pola, $1 dalam pola tadi adalah mengacu pada (\d+) yaitu tahun, $2 mengacu pada (\d{2}) yaitu tanggal, dst lihat gambar.



Untuk lebih singkat pola tadi dapat ditulis langsung dalam satu baris sebagai berikut:

<?php 
$date_sql = "2012-01-15 12:50:00";

echo preg_replace( "/^(\d+)-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2})$/",
     "$3-$2-$1, Jam $4:$5 WIB",
     $date_sql
    );
?>


Selamat mencoba!!

1 komentar:

xeverazaks mengatakan...

Mardi Gras Casino - Mapyro
Search 고양 출장안마 for Mardi 대구광역 출장샵 Gras Casino in Monticello, OH by Mapyro, a real-time service. Real-time driving 동두천 출장마사지 directions to 익산 출장마사지 Mardi Gras Casino, 255 양주 출장샵 N Lakewood, based on live traffic updates and