Ternyata, fungsi mkdate untuk UNIX tidak bisa meng-handle tanggal sebelum tahun 1970. Jadi misalnya ada tanggal=12, bulan=3, tahun=1965, terus aku buat mkdate(0,0,0,bulan,tanggal,tahun), maka hasilnya error. Dan ketika aku manfaatkan date('m-d-y', mkdate(0,0,0,bulan,tanggal,tahun)) tadi, hasilnya adalah 1-1-1970.
Wah, padahal aku perlu fungsi ini untuk memformat tampilan tanggal, yang notabene diambil dari database. Misal dari database aku temukan tanggal, dengan format yyyy-mm-dd, misal 1965-03-12. Aku ingin ada fungsi yang bisa mengikuti standard format php untuk tanggal, sehingga tanggal tersebut bisa tampil dengan format tertentu. Misalnya format 'd-M-y',hasilnya 12-Mar-65, kalau format 'm/d/y' hasilnya '03/12/65.
Sebelumnya aku pakai fungsi berikut:
Tapi ternyata karena ada keterbatasan dari mktime, akhirnya hasilnya selalu error jika tanggal yang diberikan dibawah 1970.
Setelah berjuang ... akhirnya aku temukan fungsi sendiri (jadinya manual, dan sederhana), seperti ini:
Seharusnya bisa lebih sederhana menggunakan regular expression, cuma lagi malas belajarnya. Fungsi ini juga cuma terbatas untuk format tanggal, belum sampai format hari atau jam.
Wah, padahal aku perlu fungsi ini untuk memformat tampilan tanggal, yang notabene diambil dari database. Misal dari database aku temukan tanggal, dengan format yyyy-mm-dd, misal 1965-03-12. Aku ingin ada fungsi yang bisa mengikuti standard format php untuk tanggal, sehingga tanggal tersebut bisa tampil dengan format tertentu. Misalnya format 'd-M-y',hasilnya 12-Mar-65, kalau format 'm/d/y' hasilnya '03/12/65.
Sebelumnya aku pakai fungsi berikut:
function pgDateFormat($dateData,$strFormat) {
list($strTahun,$strBulan,$strTanggal) = explode("-",$dateData);
$strHasil = date($strFormat,mktime(0,0,0,$strBulan,$strTanggal,$strTahun));
return $strHasil;
} //end of pgDateFormat
Tapi ternyata karena ada keterbatasan dari mktime, akhirnya hasilnya selalu error jika tanggal yang diberikan dibawah 1970.
Setelah berjuang ... akhirnya aku temukan fungsi sendiri (jadinya manual, dan sederhana), seperti ini:
function pgDateFormat($dateData,$strFormat) {
list($intTahun,$intBulan,$intTanggal) = explode("-",$dateData);
// loop per karakter
$intLength = strlen($strFormat);
$strHasil = "";
for ($i = 0; $i < $intLength; $i++) {
if (strpos("/-: ,.",$strFormat[$i]) != FALSE) { // delimiter
$strHasil .= $strFormat[$i]; }
else if ($strFormat[$i] == 'd') { // tanggal 2 digit
$strHasil .= $intTanggal; }
else if ($strFormat[$i] == 'j') { // tanggal tidak harus 2 digit
$strHasil .= (int)$intTanggal; }
else if ($strFormat[$i] == 'm') { // bulan, angka 2 digit
$strHasil .= $intBulan; }
else if ($strFormat[$i] == 'M') { // bulan, 3 huruf
$strHasil .= getBulanSingkat((int)$intBulan); }
else if ($strFormat[$i] == 'n') { // bulan, angka tidak harus 2 digit
$strHasil .= (int)$intBulan; }
else if ($strFormat[$i] == 'F') { // bulan, 3 huruf
$strHasil .= getBulan((int)$intBulan); }
else if ($strFormat[$i] == 'y') { // tahun 2 digit
$strHasil .= substr($intTahun,2,2); }
else if ($strFormat[$i] == 'Y') { // bulan, angka 2 digit
$strHasil .= $intTahun; }
} return
$strHasil;
} //end of pgDateFormat
Seharusnya bisa lebih sederhana menggunakan regular expression, cuma lagi malas belajarnya. Fungsi ini juga cuma terbatas untuk format tanggal, belum sampai format hari atau jam.
Comments
([0-9]{4})-([0-9]{2})-([0-9]{2})[ ]([0-9]{2}):([0-9]{2}):([0-9]{2})
Cuma pertanyaannya, apakah itu sudah mendukung validasi tentang tahun kabisat dan juga tanggal-tanggal seperti 2006-04-31, 2000-13-1 ?
Thanks anyway....