#line 2 "salat.fox" #include "salat.h" #include "cgi.h" #include "html.h" void* run_salat(map* req){ _globals.dbs.geo="/data/geo.db" _globals.dbs.bdgeo="/data/bdgeo.db" _globals.js[]="var _gaq = _gaq || []; _gaq.push(['_setAccount', 'UA-38692016-1']); _gaq.push(['_trackPageview']); (function() { var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); })();" if "salat/".get().end gps_salat() data="Dhaka [GPS Disabled]".salat_data(23.8,90.42,"Asia/Dhaka",jd_now()).data_lang() data.body=---
$(data.salat_box())
Please allow this site to use your mobile's GPS to find your location, when prompted
" $(gps_js()) ---; data.title="Salat Time at Your GPS Location" data.meta={{ description Accurate salat time calculation for wordwide cities and your current GPS location. keywords muslim namaz namaj wakt waqt time gps fajar fazar prayer salat sehri iftar }} return data.show_page() path={} _globals.paths=path if "salat/world/".get() if path.end return "select iso||'/',country from country order by country".sql_pairs(:geo).links_4cols().show_body({{ title Country List meta description List of countries for salat time keywords salat muslim prayer namaz namaj wakt waqt time fajar fazar sehri iftar world country }}) if "salat/world/([a-z][a-z])/".get([:country]) name=path.country.id_row(:country, :geo).country name || not_found() path.country_name=name _globals.menu.salat.country.title=""..name total="select count(*) from city where country_code=:code".sql_value(:geo, {code: path.country}).to_int() if total==1 path.city="select * from city where country_code=:code".sql_row(:geo, {code: path.country}) if path.end return path.city.city_salat() if path.end if total>150 return "select code||'/',name from admin1 where code like :code order by name".sql_pairs(:geo, {code: path.country.str_dup().str_upper()..".%"}).links_4cols().show_body({{ title ="$name: State List" meta description ="List of $name states for salat time" keywords ="$name salat muslim prayer namaz namaj wakt waqt time fajar fazar sehri iftar world country" }}) return "select geonameid||'/',asciiname from city where country_code=:code order by asciiname".sql_pairs(:geo, {code: path.country}).links_4cols().show_body({{ title ="$name: City List" meta description ="List of $name cities for salat time" keywords ="$name salat muslim prayer namaz namaj wakt waqt time fajar fazar sehri iftar world country" }}) if "salat/world/[a-z][a-z]/([A-Z][A-Z]).([0-9A-Za-z_]+)/".get([:country_capitalized, :state]) path.admin1=(path.country_capitalized.."."..path.state).id_row(:admin1, :geo).must_exist() _globals.menu.salat.state.title=path.admin1.name _globals.menu.salat.city1.visible=:no if path.end return "select geonameid||'/', asciiname from city where country_code=:country and admin1_code=:state order by asciiname".sql_pairs(:geo,{country: path.country, state: path.state}).links_4cols().show_body({{ title ="$(path.country_name), $(path.admin1.name): City List" meta description ="List of $(path.country_name), $(path.admin1.name) cities for salat time" keywords ="$(path.country_name) $(path.admin1.name) salat muslim prayer namaz namaj wakt waqt time fajar fazar sehri iftar world country" }}) if "salat/world/[a-z][a-z]/[A-Z][A-Z].[0-9A-Za-z_]+/([0-9]+)/".get([:cityid]) path.city=path.cityid.id_row(:city, :geo).must_exist() _globals.menu.salat.city2.title=path.city.asciiname if path.end return path.city.city_salat() if "salat/world/[a-z][a-z]/([0-9]+)/".get([:cityid]) path.city=path.cityid.id_row(:city, :geo).must_exist() _globals.menu.salat.city1.title=path.city.asciiname if path.end return path.city.city_salat() if "salat/world/[a-z][a-z]/[A-Z][A-Z].[0-9A-Za-z_]+/[0-9]+/fullyear/".get().end return path.city.city_fullyear() if "salat/world/[a-z][a-z]/[0-9]+/fullyear/".get().end return path.city.city_fullyear() if "salat/world/[a-z][a-z]/fullyear/".get().end return path.city.city_fullyear() if "salat/bangla/".get().end data=:bg.gps_salat() if !data data="ঢাকা".salat_data(23.8,90.42,"Asia/Dhaka",jd_now()).data_lang(:bg) data.body=---
$(data.salat_box())
আপনার মোবাইলের Do you want to share your location? জিজাসা করলে Accept বাটনে চাপ দিন, আপনার লোকেশনের সময়সূচি জানার জন্য
$(gps_js()) ---; data.title="GPS স্থানে আজকের নামাজের সময়সূচী" data.meta={{ description নামাজের সময় সূচি। ঢাকা শহর, আপনার GPS স্থান, এবং বাংলাদেশের সর্বত্রের জন্য keywords muslim namaz namaj namazer namajer shomoy somoy time gps fajar fazar prayer bangladesh dhaka bd salat sehri iftar }} return data.show_page() if "salat/bangla/tomorrow/".get().end data=:bg.gps_salat(1) if !data data="ঢাকা".salat_data(23.8,90.42,"Asia/Dhaka",jd_now()+1).data_lang(:bg) data.body=---
$(data.salat_box())
আপনার মোবাইলের Do you want to share your location? জিজাসা করলে Accept বাটনে চাপ দিন, আপনার লোকেশনের সময়সূচি জানার জন্য
$(gps_js()) ---; data.title="GPS স্থানে আজকের নামাজের সময়সূচী" data.meta={{ description নামাজের সময় সূচি। ঢাকা শহর, আপনার GPS স্থান, এবং বাংলাদেশের সর্বত্রের জন্য keywords muslim namaz namaj namazer namajer shomoy somoy time gps fajar fazar prayer bangladesh dhaka bd salat sehri iftar }} return data.show_page() if "salat/bangla/fullyear/".get().end gets=_globals.req.get lat=gets.lat.to_double() lng=gets.lng.to_double() row=points(lng,lat,1) name=geo_name(lng,lat,row) return name.bangla_fullyear(this_year(), lng, lat).show_body({{ title ="$name এর সারা বছরের নামাজের সময় সূচী" meta description ="$name জেলার জন্য সারা বছরের নামাজের সময় সূচি" keywords ="Bangladesh $name বাংলাদেশ জেলা নামাজ নামায নামাজের সময় ওয়াক্ত ফজর সালাত সেহরি ইফতার সারা বছরের বছর full all year print প্রিন্ট স্থায়ী স্থায়ি ক্যলেন্ডার perpetual calendar salat muslim prayer namaz namaj wakt waqt time fajar fazar sehri iftar world country" }}) if "salat/bangla/nextyear/".get().end gets=_globals.req.get lat=gets.lat.to_double() lng=gets.lng.to_double() row=points(lng,lat,1) name=geo_name(lng,lat,row) return name.bangla_fullyear(this_year()+1, lng, lat).show_body({{ title ="$name এর সারা বছরের নামাজের সময় সূচী" meta description ="$name জেলার জন্য সারা বছরের নামাজের সময় সূচি" keywords ="Bangladesh $name বাংলাদেশ জেলা নামাজ নামায নামাজের সময় ওয়াক্ত ফজর সালাত সেহরি ইফতার সারা বছরের বছর full all year print প্রিন্ট স্থায়ী স্থায়ি ক্যলেন্ডার perpetual calendar salat muslim prayer namaz namaj wakt waqt time fajar fazar sehri iftar world country" }}) if "salat/districts/".get() if path.end return --- $("select code||'/',bangla from district order by bangla".sql_pairs(:bdgeo).links_4cols()) ---.show_body({{ title বাংলাদেশের জেলা সমুহ meta description নামাজের সময় সূচির জন্য বাংলাদেশের ৬৪ জেলার লিষ্ট keywords ="bangladesh district বাংলাদেশ জেলা নামাজ নামায নামাজের সময় ওয়াক্ত ফজর সালাত সেহরি ইফতার salat muslim prayer namaz namaj wakt waqt time fajar fazar sehri iftar world country" }}) map* row=NULL if "salat/districts/([a-z_]+)/".get([:district]) path.district=path.district.district_spelling() row=path.district.id_row(:district, :bdgeo) row || not_found() _globals.menu.location.district.title=row.bangla path.row=row if path.end data="$(row.bangla) জেলা".salat_data(row.lat.to_double(), row.lng.to_double(), "Asia/Dhaka", jd_now()).data_lang(:bg) return data.salat_box().show_body({{ title =data.title meta description ="$(row.bangla) জেলার জন্য নামাজের সময় সূচি" keywords ="Bangladesh district $(row.name) $(row.bangla) বাংলাদেশ জেলা নামাজ নামায নামাজের সময় ওয়াক্ত ফজর সালাত সেহরি ইফতার salat muslim prayer namaz namaj wakt waqt time fajar fazar sehri iftar world country" }}) if "salat/districts/([a-z_]+)/tomorrow/".get([:district]).end data="$(row.bangla) জেলা".salat_data(row.lat.to_double(), row.lng.to_double(), "Asia/Dhaka", jd_now()+1).data_lang(:bg) return data.salat_box().show_body({{ title =data.title meta description ="$(row.bangla) জেলার জন্য নামাজের সময় সূচি" keywords ="Bangladesh district $(row.name) $(row.bangla) বাংলাদেশ জেলা নামাজ নামায নামাজের সময় ওয়াক্ত ফজর সালাত সেহরি ইফতার salat muslim prayer namaz namaj wakt waqt time fajar fazar sehri iftar world country" }}) if "salat/districts/[a-z_]+/fullyear/".get().end return path.row.bangla.bangla_fullyear(this_year(), path.row.lng.to_double(), path.row.lat.to_double()).show_body({{ title ="$(path.row.bangla) এর সারা বছরের নামাজের সময় সূচী" meta description ="$(path.row.bangla) জেলার জন্য সারা বছরের নামাজের সময় সূচি" keywords ="Bangladesh district $(path.row.name) $(path.row.bangla) বাংলাদেশ জেলা নামাজ নামায নামাজের সময় ওয়াক্ত ফজর সালাত সেহরি ইফতার সারা বছরের বছর full all year print প্রিন্ট স্থায়ী স্থায়ি ক্যলেন্ডার perpetual calendar salat muslim prayer namaz namaj wakt waqt time fajar fazar sehri iftar world country" }}) if "salat/districts/[a-z_]+/nextyear/".get().end return path.row.bangla.bangla_fullyear(this_year()+1, path.row.lng.to_double(), path.row.lat.to_double()).show_body({{ title ="$(path.row.bangla) এর সারা বছরের নামাজের সময় সূচী" meta description ="$(path.row.bangla) জেলার জন্য সারা বছরের নামাজের সময় সূচি" keywords ="Bangladesh district $(path.row.name) $(path.row.bangla) বাংলাদেশ জেলা নামাজ নামায নামাজের সময় ওয়াক্ত ফজর সালাত সেহরি ইফতার সারা বছরের বছর full all year print প্রিন্ট স্থায়ী স্থায়ি ক্যলেন্ডার perpetual calendar salat muslim prayer namaz namaj wakt waqt time fajar fazar sehri iftar world country" }}) if "salat/upozila/".get().end rows="select upozila.*, district.bangla as district_name from upozila left join district on upozila.district=district.code where upozila.lat!='' order by district.bangla, upozila.bangla" .sql_rows(:bdgeo) //.rows_group(:district) body='' curr='' rows.each row if row.district !== curr if curr => body.="" body.="

$(row.district_name)

" body.="" return body.show_body({{ title প্রতিটি উপজেলার নামাজের সময়সূচী meta description নামাজের সময় সূচির জন্য বাংলাদেশের উপজেলা সমুহের লিষ্ট keywords ="Bangladesh district বাংলাদেশ জেলা নামাজ নামায নামাজের সময় ওয়াক্ত ফজর সালাত সেহরি ইফতার সারা বছরের full year salat muslim prayer namaz namaj wakt waqt time fajar fazar sehri iftar world country" }}) if "salat/upozila/([a-z_]+)/".get([:upozila]) row=path.upozila.id_row(:upozila, :bdgeo) row || not_found() path.row=row _globals.menu.location.upozila.title=row.bangla if path.end data="$(row.bangla) উপজেলা".salat_data(row.lat.to_double(), row.lng.to_double(), "Asia/Dhaka", jd_now()).data_lang(:bg) return data.salat_box().show_body({{ title =data.title meta description ="$(row.bangla) উপজেলার জন্য নামাজের সময় সূচি" keywords ="Bangladesh $(row.bangla) $(row.name) $(row.district) বাংলাদেশ জেলা নামাজ নামায নামাজের সময় ওয়াক্ত ফজর সালাত সেহরি ইফতার salat muslim prayer namaz namaj wakt waqt time fajar fazar sehri iftar world country" }}) if "salat/upozila/([a-z_]+)/tomorrow/".get([:upozila]).end data="$(row.bangla) উপজেলা".salat_data(row.lat.to_double(), row.lng.to_double(), "Asia/Dhaka", jd_now()+1).data_lang(:bg) return data.salat_box().show_body({{ title =data.title meta description ="$(row.bangla) উপজেলার জন্য নামাজের সময় সূচি" keywords ="Bangladesh $(row.bangla) $(row.name) $(row.district) বাংলাদেশ জেলা নামাজ নামায নামাজের সময় ওয়াক্ত ফজর সালাত সেহরি ইফতার salat muslim prayer namaz namaj wakt waqt time fajar fazar sehri iftar world country" }}) if "salat/upozila/[a-z_]+/fullyear/".get().end return path.row.bangla.bangla_fullyear(this_year(), path.row.lng.to_double(), path.row.lat.to_double()).show_body({{ title ="$(path.row.bangla) এর সারা বছরের নামাজের সময় সূচী" meta description ="$(path.row.bangla) উপজেলার জন্য সারা বছরের নামাজের সময় সূচি" keywords ="Bangladesh $(path.row.bangla) $(path.row.name) $(path.row.district) বাংলাদেশ জেলা নামাজ নামায নামাজের সময় ওয়াক্ত ফজর সালাত সেহরি ইফতার সারা বছরের বছর full all year print প্রিন্ট স্থায়ী স্থায়ি ক্যলেন্ডার perpetual calendar salat muslim prayer namaz namaj wakt waqt time fajar fazar sehri iftar world country" }}) if "salat/upozila/[a-z_]+/nextyear/".get().end return path.row.bangla.bangla_fullyear(this_year()+1, path.row.lng.to_double(), path.row.lat.to_double()).show_body({{ title ="$(path.row.bangla) এর সারা বছরের নামাজের সময় সূচী" meta description ="$(path.row.bangla) উপজেলার জন্য সারা বছরের নামাজের সময় সূচি" keywords ="Bangladesh $(path.row.bangla) $(path.row.name) $(path.row.district) বাংলাদেশ জেলা নামাজ নামায নামাজের সময় ওয়াক্ত ফজর সালাত সেহরি ইফতার সারা বছরের বছর full all year print প্রিন্ট স্থায়ী স্থায়ি ক্যলেন্ডার perpetual calendar salat muslim prayer namaz namaj wakt waqt time fajar fazar sehri iftar world country" }}) not_found() return 0 } map* rows_group(map* rows, char* by){ ret={} rows.each row if !ret[row[by]] => ret[row[by]]=[] ret[row[by]][]=row return ret } char* district_spelling(char* in){ ret={{ jhenaidah jhenaida jaipurhat joypurhat khagrachari khagrachhari maulvibazar moulvibazar netrakona netrokona sirajgonj sirajganj }} return ret[in] or in } char* city_salat(map* row){ path=_globals.paths // double tz="select rawoffset from timezone where countrycode=:country and timezoneid=:tz".sql_value(:geo, {country: row.country_code.str_dup().str_upper(), tz: row.timezone}).str_double() // double tz=.tz_hour() title="$(row.asciiname), $(path.admin1 ? path.admin1.name..', ' : '')$(path.country_name)" row.asciiname.name_tab() return title.salat_data(row.latitude.to_double(), row.longitude.to_double(), row.timezone, jd_now()).data_lang().salat_box().show_body({{ title =title meta description ="Muslim Salat time at $title" keywords ="$title muslim namaz namaj wakt waqt time gps fajar fazar prayer salat sehri iftar" }}) } char* links_4cols(map* rows){ idx=0 ret='' for i=0; i<4; i++ ret.="
" while idx return NULL data=_globals.req.get tz={{ name =data.tzname offset =data.tzoffset.str_double() dst =data.tzdst===:DST ? :DST : '' utc =data.tzoffset.offset_utc() }} row=points(data.lng,data.lat,1) name=geo_name(data.lng,data.lat,row) location={{ en Location bg এর স্থান }} data="GPS $(location[lang]) - $name".salat_data(data.lat,data.lng,tz,jd_now()+adddays,1).data_lang(lang) data.body=---
$(data.salat_box())
Your GPS Location is Latitude: $(data.lat), Longitude: $(data.lng)
$(gps_js()) ---; return data } static char* gps_js(){ return --- ---; } map* data_lang(map* data, char* lang=:en){ map* titles='' data.lang=lang qibla=data.lng.qibla_direction(data.lat) qstr=(int)(qibla/6+0.5) if lang===:en titles={{ fajar18 Fajar rise Sun Rise noon Duhr asar1 Asar asar2 Asar (Hanafi) set Sun Set esha Esha }} data.title="Salat Time at $(data.name)" data.title3="Salat Time at $(data.name) [GPS Disabled]" data.where="TimeZone: $(data.tz.name), $(data.tz.utc.str_join(\", \", data.tz.dst))
Latitude: $(data.lat.lat_human()), Longitude: $(data.lng.lng_human())
Qibla: $qstr clock minutes from North, Bearing: $((int)(qibla+.5))°" data.ondate=data.date.date_human() if lang===:bg titles={{ fajar18 ফজর/সুবহে সাদিক rise সূর্যোদয় noon জোহর asar1 জোহর শেষ (শাফি) asar2 আসর (হানাফি) set সূর্যাস্ত/মাগরিব esha ইশা }} data.title="$(data.name) এর নামাজের সময়" data.title3="$(data.name) এর নামাজের সময় [GPS Disabled]" data.where="Latitude: $(data.lat.lat_human()), Longitude: $(data.lng.lng_human())".num_lang(:bg).str_tr({{ N উত্তর S দক্ষিন E পূর্ব W পশ্চিম Latitude অক্ষাংশ Longitude দ্রাঘিমাংশ }}) data.ondate=data.date.date_human() data.rows.each val val.long=val.long.num_lang(:bg).sub_str(0,-2)..(val.long.str_end(:am) ? "সকাল" : "বিকাল") val.short=val.short.num_lang(:bg) data.ondate=data.ondate.num_lang(:bg).str_tr({{ Jan জানুয়ারি Feb ফেব্রুয়ারি Mar মার্চ Apr এপ্রিল May মে Jun জুন Jul জুলাই Aug অগাষ্ট Sep সেপ্টেম্বর Oct অক্টোবর Nov নভেম্বর Dec ডিসেম্বর }}) data.calculated="হিসাবে আসে" titles.each val,key data.rows[key].title=val return data } map* salat_data(char* name, double lat, double lng, void* tzdata, double jd,int is_gps=0){ tz=0.0 if tzdata.is_str() => tzdata=tzdata.tz_data() tz=tzdata.offset.is_double() // jd=jd-tz/24.; salat=jd.salat_time(lng,lat) return {{ name =name lat =lat lng =lng tz =tzdata jd =jd is_gps =is_gps date =jd.jd_str(tz).date_only() rows fajar18 short =(salat.fajar18.to_double()+1./1440.).jd_str(tz).time_short() long =salat.fajar18.jd_str(tz).time_long() rise short =salat.rise.to_double().jd_str(tz).time_short() long =salat.rise.jd_str(tz).time_long() noon short =(salat.noon.to_double()+3.5/1440.).jd_str(tz).time_short() long =salat.noon.jd_str(tz).time_long() asar1 short =(salat.asar1.to_double()+1./1440.).jd_str(tz).time_short() long =salat.asar1.jd_str(tz).time_long() asar2 short =(salat.asar2.to_double()+1./1440.).jd_str(tz).time_short() long =salat.asar2.jd_str(tz).time_long() set short =(salat.set.to_double()+(is_gps ? 2 : 4.5)/1440.).jd_str(tz).time_short() long =salat.set.jd_str(tz).time_long() esha short =(salat.esha.to_double()+1./1440.).jd_str(tz).time_short() long =salat.esha.jd_str(tz).time_long() }} } char* salat_box(map* data){ body='' _globals.css[]=--- table.salat-time {max-width: 30em; } table.salat-time th {text-align:right;color:black;font-size:11pt;font-weight:bold;background:none;} table.salat-time td {text-align:right;padding:.5em; border-left:none; border-right: none; } table.salat-time td.name {text-align:left;} table.salat-time td.title-row {font-size:14pt;text-align:center;} table.salat-time td.rounded {font-size:16pt;font-weight:bold;} table.salat-time td.date-row {font-size:10pt;text-align:center;} ---; data.rows.each row body.=--- $(row.title) $(row.short) $(row.long) --- return --- $body
$(data.where)
$(data.ondate)$(data.calculated or :Calculated)
--- } char* time_long(char* date){ ret=date.sub_str(11,8) hour=0 sscanf(ret,"%02d",&hour) ampm="am" if hour>=12 => ampm="pm" if hour>12 => hour-=12 if !hour => hour=12 return hour..ret.sub_str(2,3)..""..ret.sub_str(5,3).." "..ampm } char* time_short(char* date){ ret=date.sub_str(11,5) hour=0 sscanf(ret,"%02d",&hour) if hour>12 => hour-=12 if !hour => hour=12 return hour..ret.sub_str(2,3) } char* lat_human(double val){ if !val => return "0" return mstr("%0.5g %s",fabs(val),val>0 ? :N : :S) } char* lng_human(double val){ if !val => return "0" return mstr("%0.5g %s",fabs(val),val>0 ? :E : :W) } char* geo_name(double lng,double lat,map* row){ if(!row) return "Unnamed Location" distance1=diff_angle(lng, lat, row.longitude, row.latitude) distance=(int)(distance1/360*40000+0.5) name=row.accentcity direc=bearing_name3(row.longitude, row.latitude, lng,lat) country=row.country.id_row(:country, :geo).country name.=", $country" if(distance>=2) name="$distance km $direc of $name" return name } double geo_distance(double lng1, double lat1, double lng2, double lat2){ lng1/=1000000000 lat1/=1000000000 lng2/=1000000000 lat2/=1000000000 double v1=fabs(lat1-lat2) double v2=fabs(lng1-lng2)*cosd(lat1) return sqrt(v1*v1+v2*v2) } static void sqlite_geo_distance(sqlite3_context *context, int argc, sqlite3_value **argv){ if argc != 4 context.sqlite3_result_null() return double lng1=argv[0].sqlite3_value_double() double lat1=argv[1].sqlite3_value_double() double lng2=argv[2].sqlite3_value_double() double lat2=argv[3].sqlite3_value_double() double ret=geo_distance(lng1,lat1,lng2,lat2) sqlite3_result_double(context, ret) } map* points(double lng,double lat,int limit=1){ lng*=1000000000 lat*=1000000000 long long diff=10000000 //|SQLITE_DETERMINISTIC :geo.lite_conn().sqlite3_create_function(:geo_distance, 4, SQLITE_UTF8, NULL, sqlite_geo_distance, NULL, NULL) while 1 lng1=lng-diff lng2=lng+diff lat1=lat-diff lat2=lat+diff ret="select *,geo_distance(:lng,:lat,longitude,latitude) as distance from area where longitude>$lng1 and longitude<$lng2 and latitude>$lat1 and latitude<$lat2 order by distance limit $limit".sql_rows('geo',{lng: lng, lat: lat}) if ret.map_len()==limit ret.each val, key val.longitude=val.longitude.to_double()/1000000000 val.latitude=val.latitude.to_double()/1000000000 return limit==1 ? ret[0] : ret diff*=10 if diff>100000000000ll => break return NULL } int is_dst(time_t in){ struct tm* ret=localtime(&in) return ret->tm_isdst==1 ? 1 : 0 } map* dst_change(char* tz,int year){ struct tm tm={0} tm.tm_year=year-1900 tm.tm_mon=1-1 tm.tm_mday=1 tm.tm_hour=6 tm.tm_min=0 tm.tm_sec=0 time_t secs1=mktime(&tm) tm.tm_mon=7-1 time_t secs7=mktime(&tm) if tz => :TZ.setenv(tz, 1) is1=secs1.is_dst() is7=secs7.is_dst() time_t change1=0 time_t change2=0 if !is1 && !is7 => return NULL for i=0; i<180; i++ if (secs1+i*86400).is_dst()!=is1 => change1=(secs1+i*86400); break for i=0; i<180; i++ if (secs7+i*86400).is_dst()!=is7 => change2=(secs7+i*86400); break double jd1=(change1/86400.-10957.5) double jd2=(change2/86400.-10957.5) return {{ dst =(is1 ? jd2 : jd1).double_var() nodst =(is1 ? jd1 : jd2).double_var() }} } char* city_fullyear(map* row){ path=_globals.paths tzrow="select * from timezone where timezoneid=:id".sql_row(:geo,{id: row.timezone}) keys='' name='' if path.admin1 name="$(row.asciiname), $(path.admin1.name), $(path.country_name)" keys="$(row.asciiname) $(path.admin1.name) $(path.country_name)" else if !path.cityid name=row.asciiname keys="$(row.asciiname) $(path.country_name)" else name="$(row.asciiname), $(path.country_name)" keys="$(row.asciiname) $(path.country_name)" title=name if title.str_len()<20 title="Salat Time Table For $title" else if title.str_len()<30 title="Salat Time $title" _globals.css[]=--- @media print { footer {page-break-after: always;} body {padding-left:5%; padding-right:5%;} } tr.title { font-weight: bold; border-bottom: 1px solid gray; font-size: 16pt; line-height: 1.2em; } tr.times { border-bottom: 1px solid gray; font-size: 16pt; line-height: 1.2em; } tr.dst { font-size: 16pt; border-top: 1px solid gray; border-bottom: 1px solid gray; } td.foot { font-size: 10pt; text-align: center; } td {text-align: center; } ---; ret='' year=this_year() tzdata=row.timezone.tz_data("$year-01-01") double tz=tzdata.offset.is_double() data=year.year_salat_data(row.longitude,row.latitude,tz) dst=row.timezone.dst_change(year) data.each val,key month=key.is_int() ret.=--- \n"; ret.="\n"; val.each row, j if dst && floor(row.fajar18.to_double())==floor(dst.dst.to_double()) tzdata=row.timezone.tz_data((row.fajar18.to_double()+1).jd_str(tz)) tz=tzdata.offset.is_double() ret.=--- ---; if dst && floor(row.fajar18.to_double())==floor(dst.nodst.to_double()) tzdata=row.timezone.tz_data((dst.nodst.to_double()+1).jd_str(tz)) tz=tzdata.offset.is_double() ret.=--- ---; row.each v,k row[k]=v.to_double().jd_str(tz).time_short() int day=j.is_int() ret.=--- --- ret.="\n"; ret.="
---; ret.="$(month_en(month)) - $title
DateFajarSun RiseDuhrAsarHanafiSun SetEsha
DST Starts, $(tzdata.utc)
DST Ends, $(tzdata.utc)
$day $(row.fajar18) $(row.rise) $(row.noon) $(row.asar1) $(row.asar2) $(row.set) $(row.esha)
4 mins added with sunset for magrib. 3 mins added with Jawal for Duhr. Year $year. habibur.com
"; dststr='' if dst => dststr=" with DST correction" return ret.show_body({{ title ="Full Year Salat Time : $name" meta description ="Full year salat time table for $name$dststr. Based on $year." keywords ="$keys full all year print perpetual calendar salat muslim prayer namaz namaj wakt waqt time table fajar fazar sehri iftar world dst corrected" }}) return ret } char* bangla_fullyear(char* name, int year,double lng,double lat){ _globals.css[]=--- @media print { footer {page-break-after: always;} body {padding-left:5%; padding-right:5%;} } tr.title { font-weight: bold; border-bottom: 1px solid gray; font-size: 16pt; line-height: 1.2em; } tr.times { border-bottom: 1px solid gray; font-size: 16pt; line-height: 1.2em; } td.foot { font-size: 10pt; text-align: center; } ---; ret='' data=year.year_salat_data(lng,lat,6.) data.each val,key month=key.is_int() ret.=--- \n"; ret.="\n"; val.each row, j row.each v,k row[k]=v.to_double().jd_str(6.).time_short().num_lang(:bg) day=j.is_int().int_str().num_lang(:bg) ret.=--- ---; ret.="\n"; ret.="
---; ret.="মাস : $(month_bg(month)) - নামাজের সময় - শহর : $(name)
তারিখফজরসূর্যোদয়জোহরআসরমাগরিবইশা
$day $(row.fajar18) $(row.rise) $(row.noon) $(row.asar2) $(row.set) $(row.esha)
মাগরিব সূর্যাস্তের ৪ মিনিট পরে দেয়া হয়েছে। জোহর জাওয়ালের ৩ মিনিট পর। আর কিছু যোগ করা হয় নি। $(year.num_lang(:bg)) habibur.com
"; return ret } map* year_salat_data(int year, double lng, double lat, double tz){ ret=[] for i=1; i<=12; i++ ret[]=i.month_salat_data(year,lng,lat,tz) return ret } map* month_salat_data(int month, int year, double lng, double lat, double tz){ days=month.days_in_month(year) jd=jd3(year,month,1)-tz/24 adds={{ fajar18 =1. rise =0. noon =3.5 asar1 =1. asar2 =1. set =4.5 esha =1. }} ret=[] for i=0; i return in ? in : not_found() void* sqlite_func(char* name, char* db){ map* func=user_funcs()[name] if !func => "Function $name not found in sqlite_func".fox_error() db.lite_conn().sqlite3_create_function(name, -1, SQLITE_UTF8, func, sqlite_func_handler, NULL, NULL) return name } static void sqlite_func_handler(sqlite3_context *context, int argc, sqlite3_value **argv){ map* func=context.sqlite3_user_data() if !func.name => "sqlite_func_handler() corrupt function handler".fox_error() params=[] for i=0; i