October 1, 2012

Fungsi Untuk Hitung Pasaran Jawa

Pernah terpikir bagaimana cara mengetahui hari pasaran jawa (Pahing, Pon, Wage, Kliwon, Legi) hanya dari tanggal? kelihatanya mudah, tapi sebenarnya tak semudah yang di bayangkan, tapi, kalau sudah di kerjakan niscaya sebenarnya gampang kok, ini saya buat sebuah fungsi untuk mengetahui hari pasaran jawa.
function getPasaran(inputDate) {
  var pasDiketahui= new Date(1944, 11, 1);
  var hrPasaranU = ["Pahing", "Pon", "Wage", "Kliwon", "Legi"];
  var hrPasaranD = ["Pahing", "Legi", "Kliwon", "Wage", "Pon"];
  var oneDay = 1000 * 60 * 60 * 24;

  var actualDiff = inputDate - pasDiketahui.getTime();
  var actualDiffDay = Math.floor(actualDiff/oneDay);

  var i = actualDiffDay % 5

  if(actualDiffDay < 0){
    i = i * -1;
    return hrPasaranD[i];
  }

  return hrPasaranU[i];
}
untuk menggunakannya, anda cukup memasukkan tanggal yang ingin di cari pasarannya, misal:
var tglLahir = new Date(1990, 6, 3)
function getPasaran(tglLahir)
sekarang saya akan menjelaskan bagian bagian dari code, pertama adalah:
var pasDiketahui= new Date(1944, 11, 1); //Hari pasaran yang di ketahui
code di atas menentukan tanggal dimana hari pasaran yang sudah anda ketahui, ingat bulan harus di kurangi satu, jadi ketika saya maksud januari, maka bulannya harus 0, desember di tulis 11, misal contoh di atas, saya tahu tanggal 1 desember 1944 adalah hari pahing, maka kode selanjutnya adalah menulis array sesuai urutan dimulai dari hari yang anda ketahui tadi, dalam contoh ini adalah pahing, jadi kita buat array dimulai dari pahing, selain itu kita juga membuat array satu lagi tetap dimulai dari hari yang di ketahui tadi, cuma array ini urutan harinya terbalik, ini dimaksudkan untuk meghitung hari sebelum hari yang diketahui pasarannya
var hrPasaranU = ["Pahing", "Pon", "Wage", "Kliwon", "Legi"];
var hrPasaranD = ["Pahing", "Legi", "Kliwon", "Wage", "Pon"]
kode selanjutnya adalah menghitung satu hari dalam milisecond,
var oneDay = 1000 * 60 * 60 * 24; // satu hari dalam miliseconds
saya rasa ini tidak butuh penjelasan, tapi tak apalah saya jelaskan, 24 jam sehari, 60 menit per jam, 60 detik per menit dan 1000 milisecond per detik. Selanjutnya adalah menghitung selisih antara hari yang di ketahui pasarannya dengan hari yang di inputkan,
var actualDiff = inputDate - pasDiketahui.getTime();
var actualDiffDay = Math.floor(actualDiff/oneDay);
actualDiff adalah selisih hari yang ingin kita cari pasarannya dan hari yang kita tahu pasarannya dalam milisecond, sedangkan actualDiffDay adalah selisihnya dalam hari, terakhir kembalikan dalam bentuk nama hari pasaran dengan cara membagi selisih hari dengan lima, sisanya adalah index array dari hari pasaran yang kita buat di atas, jika hasilnya minus (artinya tanggal yang dimasukkan sebelum tanggal yang di ketahui pasarannya) maka kita harus mengalikannya dengan -1 lalu yang kita gunakan adalah array yang terbalik yaitu hrPasaranD, jika hasilnya plus kita gunakan yang normal hrPasaranU.
var i = actualDiffDay % 5

if(actualDiffDay < 0){
  i = i * -1;
  return hrPasaranD[i];
}

return hrPasaranU[i];

No comments:

Post a Comment