Software untuk mencari waktu shalat sudah banyak, termasuk yang dirilis Depag RI (winhisab). Pernah googling buat nyari source-code menghitung waktu shalat untuk di"tempel" di aplikasi yang selama ini saya buat, ternyata yang ditulis pake Delphi gak ketemu. Trus googling algotima hitungan waktu shalat dan dari sekian banyak algoritma (VSOP87 dan ELP2000 (pergerakan bulan), Meous) menurut saya yang paling praktis itu seperti yang ditulis di googlecode ini. Mengapa praktis? algoritma yang lain masih belom sukses ketika saya tulis di Delphi (mungkin kurang teliti di penulisan tanda kurung di persamaan matematisnya :) ). Dan yang 1 ini sudah pantas buat saya "pamer"kan kepada pembaca (yang mau aja lho).
Buat yang ini menggunakan code saya ini, silahkan ... tentunya dengan tanggung-jawab sepenuhnya ada pada anda sendiri, iya to. . . Kan gak mungkin saya bisa nanggung kalo ada kerugian yang mungkin terjadi dari s/w buatan saya ini to ya . . . he he he
to-do : saya pengin melengkapi dengan semua algoritma untuk pembandingan hasil,jadi tunggu release yang lebih lanjutnya (semoga gak berhenti disini, amin)
ini potongan code-nya
<pre><code>
uses math;
var h,tz,sh :integer;
B,L,gd,gn:real;
subuh,terbit,zuhur,ashar,maghrib,isya:real;
procedure hitung(tgl:TDateTime);
var D,T,R,beta,Z,U,Vd,Vn,W : extended;
j : integer;
function YearOf(const AValue: TDateTime): Word;
var LMonth, LDay: Word;
begin
DecodeDate(AValue, Result, LMonth, LDay);
end;
begin
j :=Trunc(tgl-EncodeDate(YearOf(tgl),1,1)); //= DayOfTheYear(tgl);
beta:=2*pi*J/365;
D :=(180/pi)*(0.006918-(0.399912*cos(beta))+(0.070257*sin(beta))-(0.006758*cos(2*beta))+(0.000907*sin(2*beta))-(0.002697*cos(3*beta))+(0.001480*sin(3*beta)));
T :=229.18*(0.000075+(0.001868*cos(beta))-(0.032077*sin(beta))-(0.014615*cos(2*beta))-(0.040849*sin(2*beta)));
R :=15*TZ;
Z :=12+((R-L)/15)-(T/60);
U :=(180/(15*pi))*arccos((sin((-0.8333-0.0347*sign(H)*sqrt(abs(H)))*(pi/180))-sin(D*(pi/180))*sin(B*(pi/180)))/(cos(D*(pi/180))*cos(B*(pi/180))));
Vd:=(180/(15*pi))*arccos((-sin(Gd*(pi/180))-sin(D*(pi/180))*sin(B*(pi/180)))/(cos(D*(pi/180))*cos(B*(pi/180))));
Vn:=(180/(15*pi))*arccos((-sin(Gn*(pi/180))-sin(D*(pi/180))*sin(B*(pi/180)))/(cos(D*(pi/180))*cos(B*(pi/180))));
W :=(180/(15*pi))*arccos((sin(arctan(1/(Sh+tan(abs(B-D)*pi/180))))-sin(D*pi/180)*sin(B*pi/180))/(cos(D*pi/180)*cos(B*pi/180)));
subuh :=Z-Vd;
terbit :=Z-U;
zuhur :=Z;
ashar :=Z+W;
maghrib:=Z+U;
isya :=Z+Vn;
end;
var h,tz,sh :integer;
B,L,gd,gn:real;
subuh,terbit,zuhur,ashar,maghrib,isya:real;
procedure hitung(tgl:TDateTime);
var D,T,R,beta,Z,U,Vd,Vn,W : extended;
j : integer;
function YearOf(const AValue: TDateTime): Word;
var LMonth, LDay: Word;
begin
DecodeDate(AValue, Result, LMonth, LDay);
end;
begin
j :=Trunc(tgl-EncodeDate(YearOf(tgl),1,1)); //= DayOfTheYear(tgl);
beta:=2*pi*J/365;
D :=(180/pi)*(0.006918-(0.399912*cos(beta))+(0.070257*sin(beta))-(0.006758*cos(2*beta))+(0.000907*sin(2*beta))-(0.002697*cos(3*beta))+(0.001480*sin(3*beta)));
T :=229.18*(0.000075+(0.001868*cos(beta))-(0.032077*sin(beta))-(0.014615*cos(2*beta))-(0.040849*sin(2*beta)));
R :=15*TZ;
Z :=12+((R-L)/15)-(T/60);
U :=(180/(15*pi))*arccos((sin((-0.8333-0.0347*sign(H)*sqrt(abs(H)))*(pi/180))-sin(D*(pi/180))*sin(B*(pi/180)))/(cos(D*(pi/180))*cos(B*(pi/180))));
Vd:=(180/(15*pi))*arccos((-sin(Gd*(pi/180))-sin(D*(pi/180))*sin(B*(pi/180)))/(cos(D*(pi/180))*cos(B*(pi/180))));
Vn:=(180/(15*pi))*arccos((-sin(Gn*(pi/180))-sin(D*(pi/180))*sin(B*(pi/180)))/(cos(D*(pi/180))*cos(B*(pi/180))));
W :=(180/(15*pi))*arccos((sin(arctan(1/(Sh+tan(abs(B-D)*pi/180))))-sin(D*pi/180)*sin(B*pi/180))/(cos(D*pi/180)*cos(B*pi/180)));
subuh :=Z-Vd;
terbit :=Z-U;
zuhur :=Z;
ashar :=Z+W;
maghrib:=Z+U;
isya :=Z+Vn;
end;
</code></pre>
pada kasus ini :
ReplyDeletetanggal 29/04/2019
lintang -7,87682
bujur = 110,39137
hasil perhitungan jadi
Subuh : 04:21:11 > 04:24
Terbit : 05:39:35 > 05:36
Zuhur : 11:36:06 > 11:39
Ashar : 14:57:20 > 14:60 ---- di sini jam menjadi aneh 14:00
Maghrib : 17:32:38 > 17:35
Isya : 18:42:46 > 18:45
ralat 14:60
ReplyDelete