2

I would like to add monthly hijri date with days to the script.

The script has two parts, the first is HTML and and the sconed is javascript, but I managed to add only javascript.

I am not expert in javascript, I am learning from you how to develop sites but javascript.

Could you please help to modify the script.

Best Regards,

//--------------------- Copyright Block ----------------------
   
//--------------------- Help and Manual ----------------------
/*

//------------------------ User Interface -------------------------
getTimes (date, coordinates [, timeZone [, dst [, timeFormat]]]) 
setMethod (method)       // set calculation method 
adjust (parameters)      // adjust calculation parameters 
tune (offsets)           // tune times by given offsets 
getMethod ()             // get calculation method 
getSetting ()            // get current calculation parameters
getOffsets ()            // get current time offsets
//------------------------- Sample Usage --------------------------
var PT = new PrayTimes('ISNA');
var times = PT.getTimes(new Date(), [43, -80], -5);
document.write('Sunrise = '+ times.sunrise)
*/
//----------------------- PrayTimes Class ------------------------
function PrayTimes(method) {
//------------------------ Constants --------------------------
var
// Time Names
timeNames = {
imsak    : 'Imsak',
fajr     : 'Fajr',
sunrise  : 'Sunrise',
dhuhr    : 'Dhuhr',
asr      : 'Asr',
sunset   : 'Sunset',
maghrib  : 'Maghrib',
isha     : 'Isha',
midnight : 'Midnight'
},
// Calculation Methods
methods = {
MWL: {
name: 'Muslim World League',
params: { fajr: 18, isha: 17 } },
ISNA: {
name: 'Islamic Society of North America (ISNA)',
params: { fajr: 15, isha: 15 } },
Egypt: {
name: 'Egyptian General Authority of Survey',
params: { fajr: 19.5, isha: 17.5 } },
Makkah: {
name: 'Umm Al-Qura University, Makkah',
params: { fajr: 18.5, isha: '90 min' } },  // fajr was 19 degrees before 1430 hijri
Karachi: {
name: 'University of Islamic Sciences, Karachi',
params: { fajr: 18, isha: 18 } },
Tehran: {
name: 'Institute of Geophysics, University of Tehran',
params: { fajr: 17.7, isha: 14, maghrib: 4.5, midnight: 'Jafari' } },  // isha is not explicitly specified in this method
Jafari: {
name: 'Shia Ithna-Ashari, Leva Institute, Qum',
params: { fajr: 16, isha: 14, maghrib: 4, midnight: 'Jafari' } },
Gulf: {
name: 'Gulf Region',
params: { fajr: 19.5, isha: '90 min' } },
Kuwait: {
name: 'Kuwait',
params: { fajr: 18, isha: 17.5 } },
Qatar: {
name: 'Qatar',
params: { fajr: 18, isha: '90 min' } },
Singapore: {
name: 'Majlis Ulama Islam Singapura, Singapore',
params: { fajr: 20, isha: 18 } },
France: {
name: 'Union Organization Islamic de France',
params: { fajr: 12, isha: 12 } },
Turkey: {
name: 'Diyanet İşleri Başkanlığı, Turkey',
params: { fajr: 18, isha: 17 } },
Indonesia: {
name: 'Kementrian Agama RI, Indonesia',
params: { fajr: 19, isha: 17 } }
},
// Default Parameters in Calculation Methods
defaultParams = {
maghrib: '0 min', midnight: 'Standard'
},
//----------------------- Parameter Values ----------------------
/*
// Asr Juristic Methods
asrJuristics = [ 
'Standard',    // Shafi`i, Maliki, Ja`fari, Hanbali
'Hanafi'       // Hanafi
],
// Midnight Mode
midnightMethods = [ 
'Standard',    // Mid Sunset to Sunrise
'Jafari'       // Mid Sunset to Fajr
],
// Adjust Methods for Higher Latitudes
highLatMethods = [
'NightMiddle', // middle of night
'AngleBased',  // angle/60th of night
'OneSeventh',  // 1/7th of night
'None'         // No adjustment
],
// Time Formats
timeFormats = [
'24h',         // 24-hour format
'12h',         // 12-hour format
'12hNS',       // 12-hour format with no suffix
'Float'        // floating point number 
],
*/ 
//---------------------- Default Settings --------------------
calcMethod = 'MWL',
// do not change anything here; use adjust method instead
setting = {  
imsak    : '10 min',
dhuhr    : '0 min',  
asr      : 'Standard',
highLats : 'NightMiddle'
},
timeFormat = '12h',
timeSuffixes = ['ص', 'م'],
invalidTime =  '-----',
numIterations = 1,
offset = {},
//----------------------- Local Variables ---------------------
lat, lng, elv,       // coordinates
timeZone, jDate;     // time variables
//---------------------- Initialization -----------------------
// set methods defaults
var defParams = defaultParams;
for (var i in methods) {
var params = methods[i].params;
for (var j in defParams)
if ((typeof(params[j]) == 'undefined'))
params[j] = defParams[j];
};
// initialize settings
calcMethod = methods[method] ? method : calcMethod;
var params = methods[calcMethod].params;
for (var id in params)
setting[id] = params[id];
// init time offsets
for (var i in timeNames)
offset[i] = 0;
//----------------------- Public Functions ------------------------
return {
// set calculation method 
setMethod: function(method) {
if (methods[method]) {
this.adjust(methods[method].params);
calcMethod = method;
}
},
// set calculating parameters
adjust: function(params) {
for (var id in params)
setting[id] = params[id];
},
// set time offsets
tune: function(timeOffsets) {
for (var i in timeOffsets)
offset[i] = timeOffsets[i];
},
// get current calculation method
getMethod: function() { return calcMethod; },
// get current setting
getSetting: function() { return setting; },
// get current time offsets
getOffsets: function() { return offset; },
// get default calc parametrs
getDefaults: function() { return methods; },
// return prayer times for a given date
getTimes: function(date, coords, timezone, dst, format) {
lat = 1* coords[0];
lng = 1* coords[1]; 
elv = coords[2] ? 1* coords[2] : 0;
timeFormat = format || timeFormat;
if (date.constructor === Date)
date = [date.getFullYear(), date.getMonth()+ 1, date.getDate()];
if (typeof(timezone) == 'undefined' || timezone == 'auto')
timezone = this.getTimeZone(date);
if (typeof(dst) == 'undefined' || dst == 'auto') 
dst = this.getDst(date);
timeZone = 1* timezone+ (1* dst ? 1 : 0);
jDate = this.julian(date[0], date[1], date[2])- lng/ (15* 24);
return this.computeTimes();
},
// convert float time to the given format (see timeFormats)
getFormattedTime: function(time, format, suffixes) {
if (isNaN(time))
return invalidTime;
if (format == 'Float') return time;
suffixes = suffixes || timeSuffixes;
time = DMath.fixHour(time+ 0.5/ 60);  // add 0.5 minutes to round
var hours = Math.floor(time); 
var minutes = Math.floor((time- hours)* 60);
var suffix = (format == '12h') ? suffixes[hours < 12 ? 0 : 1] : '';
var hour = (format == '24h') ? this.twoDigitsFormat(hours) : ((hours+ 12 -1)% 12+ 1);
return hour+ ':'+ this.twoDigitsFormat(minutes)+ (suffix ? ' '+ suffix : '');
},
//---------------------- Calculation Functions -----------------------
// compute mid-day time
midDay: function(time) {
var eqt = this.sunPosition(jDate+ time).equation;
var noon = DMath.fixHour(12- eqt);
return noon;
},
// compute the time at which sun reaches a specific angle below horizon
sunAngleTime: function(angle, time, direction) {
var decl = this.sunPosition(jDate+ time).declination;
var noon = this.midDay(time);
var t = 1/15* DMath.arccos((-DMath.sin(angle)- DMath.sin(decl)* DMath.sin(lat))/ 
(DMath.cos(decl)* DMath.cos(lat)));
return noon+ (direction == 'ccw' ? -t : t);
},
// compute asr time 
asrTime: function(factor, time) { 
var decl = this.sunPosition(jDate+ time).declination;
var angle = -DMath.arccot(factor+ DMath.tan(Math.abs(lat- decl)));
return this.sunAngleTime(angle, time);
},
// compute declination angle of sun and equation of time
// Ref: http://aa.usno.navy.mil/faq/docs/SunApprox.php
sunPosition: function(jd) {
var D = jd - 2451545.0;
var g = DMath.fixAngle(357.529 + 0.98560028* D);
var q = DMath.fixAngle(280.459 + 0.98564736* D);
var L = DMath.fixAngle(q + 1.915* DMath.sin(g) + 0.020* DMath.sin(2*g));
var R = 1.00014 - 0.01671* DMath.cos(g) - 0.00014* DMath.cos(2*g);
var e = 23.439 - 0.00000036* D;
var RA = DMath.arctan2(DMath.cos(e)* DMath.sin(L), DMath.cos(L))/ 15;
var eqt = q/15 - DMath.fixHour(RA);
var decl = DMath.arcsin(DMath.sin(e)* DMath.sin(L));
return {declination: decl, equation: eqt};
},
// convert Gregorian date to Julian day
// Ref: Astronomical Algorithms by Jean Meeus
julian: function(year, month, day) {
if (month <= 2) {
year -= 1;
month += 12;
};
var A = Math.floor(year/ 100);
var B = 2- A+ Math.floor(A/ 4);
var JD = Math.floor(365.25* (year+ 4716))+ Math.floor(30.6001* (month+ 1))+ day+ B- 1524.5;
return JD;
},
//---------------------- Compute Prayer Times -----------------------
// compute prayer times at given julian date
computePrayerTimes: function(times) {
times = this.dayPortion(times);
var params  = setting;
var imsak   = this.sunAngleTime(this.eval(params.imsak), times.imsak, 'ccw');
var fajr    = this.sunAngleTime(this.eval(params.fajr), times.fajr, 'ccw');
var sunrise = this.sunAngleTime(this.riseSetAngle(), times.sunrise, 'ccw');  
var dhuhr   = this.midDay(times.dhuhr);
var asr     = this.asrTime(this.asrFactor(params.asr), times.asr);
var sunset  = this.sunAngleTime(this.riseSetAngle(), times.sunset);;
var maghrib = this.sunAngleTime(this.eval(params.maghrib), times.maghrib);
var isha    = this.sunAngleTime(this.eval(params.isha), times.isha);
return {
imsak: imsak, fajr: fajr, sunrise: sunrise, dhuhr: dhuhr, 
asr: asr, sunset: sunset, maghrib: maghrib, isha: isha
};
},
// compute prayer times 
computeTimes: function() {
// default times
var times = { 
imsak: 5, fajr: 5, sunrise: 6, dhuhr: 12, 
asr: 13, sunset: 18, maghrib: 18, isha: 18
};
// main iterations
for (var i=1 ; i<=numIterations ; i++) 
times = this.computePrayerTimes(times);
times = this.adjustTimes(times);
// add midnight time
times.midnight = (setting.midnight == 'Jafari') ? 
times.sunset+ this.timeDiff(times.sunset, times.fajr)/ 2 :
times.sunset+ this.timeDiff(times.sunset, times.sunrise)/ 2;
times = this.tuneTimes(times);
return this.modifyFormats(times);
},
// adjust times 
adjustTimes: function(times) {
var params = setting;
for (var i in times)
times[i] += timeZone- lng/ 15;
if (params.highLats != 'None')
times = this.adjustHighLats(times);
if (this.isMin(params.imsak))
times.imsak = times.fajr- this.eval(params.imsak)/ 60;
if (this.isMin(params.maghrib))
times.maghrib = times.sunset+ this.eval(params.maghrib)/ 60;
if (this.isMin(params.isha))
times.isha = times.maghrib+ this.eval(params.isha)/ 60;
times.dhuhr += this.eval(params.dhuhr)/ 60; 
return times;
},
// get asr shadow factor
asrFactor: function(asrParam) {
var factor = {Standard: 1, Hanafi: 2}[asrParam];
return factor || this.eval(asrParam);
},
// return sun angle for sunset/sunrise
riseSetAngle: function() {
//var earthRad = 6371009; // in meters
//var angle = DMath.arccos(earthRad/(earthRad+ elv));
var angle = 0.0347* Math.sqrt(elv); // an approximation
return 0.833+ angle;
},
// apply offsets to the times
tuneTimes: function(times) {
for (var i in times)
times[i] += offset[i]/ 60; 
return times;
},
// convert times to given time format
modifyFormats: function(times) {
for (var i in times)
times[i] = this.getFormattedTime(times[i], timeFormat); 
return times;
},
// adjust times for locations in higher latitudes
adjustHighLats: function(times) {
var params = setting;
var nightTime = this.timeDiff(times.sunset, times.sunrise); 
times.imsak = this.adjustHLTime(times.imsak, times.sunrise, this.eval(params.imsak), nightTime, 'ccw');
times.fajr  = this.adjustHLTime(times.fajr, times.sunrise, this.eval(params.fajr), nightTime, 'ccw');
times.isha  = this.adjustHLTime(times.isha, times.sunset, this.eval(params.isha), nightTime);
times.maghrib = this.adjustHLTime(times.maghrib, times.sunset, this.eval(params.maghrib), nightTime);
return times;
},
// adjust a time for higher latitudes
adjustHLTime: function(time, base, angle, night, direction) {
var portion = this.nightPortion(angle, night);
var timeDiff = (direction == 'ccw') ? 
this.timeDiff(time, base):
this.timeDiff(base, time);
if (isNaN(time) || timeDiff > portion) 
time = base+ (direction == 'ccw' ? -portion : portion);
return time;
},
// the night portion used for adjusting times in higher latitudes
nightPortion: function(angle, night) {
var method = setting.highLats;
var portion = 1/2; // MidNight
if (method == 'AngleBased')
portion = 1/60* angle;
if (method == 'OneSeventh')
portion = 1/7;
return portion* night;
},
// convert hours to day portions 
dayPortion: function(times) {
for (var i in times)
times[i] /= 24;
return times;
},
//---------------------- Time Zone Functions -----------------------
// get local time zone
getTimeZone: function(date) {
var year = date[0];
var t1 = this.gmtOffset([year, 0, 1]);
var t2 = this.gmtOffset([year, 6, 1]);
return Math.min(t1, t2);
},
// get daylight saving for a given date
getDst: function(date) {
return 1* (this.gmtOffset(date) != this.getTimeZone(date));
},
// GMT offset for a given date
gmtOffset: function(date) {
var localDate = new Date(date[0], date[1]- 1, date[2], 12, 0, 0, 0);
var GMTString = localDate.toGMTString();
var GMTDate = new Date(GMTString.substring(0, GMTString.lastIndexOf(' ')- 1));
var hoursDiff = (localDate- GMTDate) / (1000* 60* 60);
return hoursDiff;
},
//---------------------- Misc Functions -----------------------
// convert given string into a number
eval: function(str) {
return 1* (str+ '').split(/[^0-9.+-]/)[0];
},
// detect if input contains 'min'
isMin: function(arg) {
return (arg+ '').indexOf('min') != -1;
},
// compute the difference between two times 
timeDiff: function(time1, time2) {
return DMath.fixHour(time2- time1);
},
// add a leading 0 if necessary
twoDigitsFormat: function(num) {
return (num <10) ? '0'+ num : num;
}
}}
//---------------------- Degree-Based Math Class -----------------------
var DMath = {
dtr: function(d) { return (d * Math.PI) / 180.0; },
rtd: function(r) { return (r * 180.0) / Math.PI; },
sin: function(d) { return Math.sin(this.dtr(d)); },
cos: function(d) { return Math.cos(this.dtr(d)); },
tan: function(d) { return Math.tan(this.dtr(d)); },
arcsin: function(d) { return this.rtd(Math.asin(d)); },
arccos: function(d) { return this.rtd(Math.acos(d)); },
arctan: function(d) { return this.rtd(Math.atan(d)); },
arccot: function(x) { return this.rtd(Math.atan(1/x)); },
arctan2: function(y, x) { return this.rtd(Math.atan2(y, x)); },
fixAngle: function(a) { return this.fix(a, 360); },
fixHour:  function(a) { return this.fix(a, 24 ); },
fix: function(a, b) { 
a = a- b* (Math.floor(a/ b));
return (a < 0) ? a+ b : a;
}
}
//---------------------- Init Object -----------------------
var prayTimes = new PrayTimes();
function PrintPage(n) {
var o = $("input[readonly='true']"),
u = $("[printable='true']"),
s,
r,
f,
i,
e;
if (u.length == 0) return window.print(), !1;
var h = "about:blank",
l = new Date(),
c = "Print" + l.getTime(),
t;
for (
navigator.userAgent.toLowerCase().indexOf("chrome") <= -1
? (t = window.open(h, c, "left=50000,top=50000,width=0,height=0"))
: navigator.userAgent.toLowerCase().indexOf("chrome") > -1 && ((s = ["height=" + screen.height, "width=" + screen.width, "fullscreen=yes"].join(",")), (t = window.open(h, c, s))),
f = !0,
i = 0;
i < u.length;
i++
)
(r = u[i]),
$(r)
.find("[unprintable]")
.each(function () {
$(this).hide();
}),
f &&
(t.document.write(
'
<style type="text/css">.row.feild_row{width:100%;}.col-xs-12.no_padding{width:100%;}.col-xs-5.col-sm-4.feild_title{width:170px;position: relative;margin-left: 10px;padding-right: 10px;}.col-xs-7.col-sm-8.feild_data{margin: 0 10px;float: none;}.col-sm-12.col-md-12.col-lg-6.no_padding{width:50%}.GridClass tr.tableHeaderCell th a {color: #000;cursor: text;text-decoration: none;}.GridClass tr.tableHeaderCell th img {display: none;}</style>
'
),
t.document.write(
'
<style type="text/css">.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{float:right}.form-operation-links-header{border-bottom:1px solid #b5c4d9;margin-bottom:10px;padding:5px}.form-operation-links-body{padding:0 0 10px}.form-controls-header{border-bottom:1px solid #b5c4d9;margin-bottom:10px;padding:5px}.form-controls-body{padding:10px 0}.form-controls-body div.row{margin-left:0;margin-right:0}.form-mandatory-field{padding:5px 0}.form-operation-message{padding:10px 0;text-align:center;margin:0}.form-actions{padding:10px 0;text-align:center;margin:0}.form-actions ul{list-style:none;margin:0;padding:0}.form-actions ul li{display:inline-block}.form-table-print{padding:2px 0}.form-table-body{padding:5px 0}.form-reportviewer{padding:10px 0}.divscrollbar-horizontal{overflow-y:hidden;overflow-x:auto}.divscrollbar-horizontal-vertical{overflow:auto}.ModalPopupExtender{overflow:auto;left:0!important;right:0!important;bottom:0!important;top:0!important;padding:20px 10%;display:flex;justify-content:center;align-items:center}.form-ModalPopup{min-width:300px;width:auto;height:auto;background:#fff;-webkit-box-shadow:0 4px 23px 5px rgba(0,0,0,0.2),0 2px 6px rgba(0,0,0,0.15);box-shadow:0 4px 23px 5px rgba(0,0,0,0.2),0 2px 6px rgba(0,0,0,0.15);border:solid 2px #D1D1D1}.form-ModalPopup-header{background:#009d8f;padding:7px 10px 7px 35px;min-height:30px;overflow-y:hidden;overflow-x:auto;position:relative}.form-ModalPopup-header span{color:#fff;white-space:pre-line!important}.form-ModalPopup-Background{top:0;left:0;background-color:rgba(0,158,143,0.8);opacity:.7}.btnCloseModalPopup{border:0;top:0;left:0;position:absolute;background:#009d8f;color:#fff;width:35px;height:30px;font-size:22px}.form-ModalPopup-body{padding:5px 10px}.form-ConfirmBox-header{position:relative}.form-ConfirmBox-body{padding:10px}.feild_title:after{content:":";position:absolute;left:-5px;top:5px;font-weight:700;color:#555}.feild_title{padding-top:4px;padding-bottom:4px}.manditory{color:orange;right:0;position:absolute}div.row .StandardFontPlain,div.row .control-dropdownlist,div.row .select2-container,.select_date_table{max-width:250px;margin:0!important}div.row input{border:1px solid #ADADAB}.select_date_table{border:0 solid #ADADAB;margin:0}.pagesectioncontent{overflow:hidden}.no_padding{padding:0}.PageTitle{font-size:12px}.feild_row{margin:0}.feild_data{padding-top:4PX;padding-bottom:4px}.feild_title .StandardFont{white-space:pre-wrap!important}.control-dropdownlist{font-weight:400;font-size:12px;color:#555;margin-bottom:5px;margin-left:5px;width:100%!important}.table-control-dropdownlist{font-weight:400;font-size:12px;color:#555;margin-bottom:5px;margin-left:5px}.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox],.radio input[type=radio],.radio-inline input[type=radio]{position:relative;margin-left:auto}.checkbox,.radio{margin-top:unset;margin-bottom:unset}input[type="radio"] + label{white-space:normal;display:inline-table}input[type="checkbox"] + label{white-space:normal;display:inline-table}</style>
'
),
(f = !1)),
t.document.write(r.innerHTML),
t.document.write("<br/>"),
t.document.write("<br/>"),
$(r)
.find("[unprintable]")
.each(function () {
$(this).show();
});
for (e = $("input[readonly='true']", t.document), i = 0; i < o.length; i++) e.length > 0 && (e[i].value = o[i].value);
return (
$("input[alt='Hijri - هجري']", t.document).each(function () {
$(this).remove();
}),
$("input[alt='Gregorian - ميلادي']", t.document).each(function () {
$(this).remove();
}),
$("input:text", t.document).each(function () {
$(this).parent().html($(this).val());
$(this).remove();
}),
$("select", t.document).each(function () {
$(this).before($(this)[0][parseInt($("option:selected", this).index())].text);
$(this).remove();
}),
$(".select2.select2-container.select2-container--default.select2-container--disabled", t.document).each(function () {
$(this).remove();
}),
$(".select2-container--default", t.document).each(function () {
$(this).remove();
}),
$("textarea", t.document).each(function () {
$(this).parent().parent().html($(this).val());
$(this).remove();
}),
(t.document.getElementsByTagName("body")[0].dir = n),
(t.document.dir = n),
t.document.close(),
t.focus(),
navigator.userAgent.toLowerCase().indexOf("chrome") > -1 ? (getChromeVersion() >= 77 ? t.addEventListener("load", t.window.print, !0) : (setTimeout(t.print(), 50), setTimeout(t.close(), 50))) : (t.print(), t.close()),
!1
);
}
sandrose
  • 21
  • 2
  • As per my understanding, the script is not of Hijri calender, instead it is of Prayer times :) – DevLoverUmar Jun 02 '20 at 10:21
  • You have asked an abstract question. Please modify the question to ask for, in which scenario you need hijri date and at which place and on which action you want to display that calender. Or is that the whole calender or just the current Hijri date? – DevLoverUmar Jun 02 '20 at 10:28
  • https://medium.com/@Saf_Bes/get-today-hijri-date-in-javascript-90855d3cd45b – DevLoverUmar Jun 02 '20 at 10:29
  • The script display days in gregorian for the gregorian month in the first column of the table and I would like to disply the hijri date as well in the second column of the table. See the active prayertime (https://www.ihijri.com/salah/) – sandrose Jun 03 '20 at 05:51

0 Answers0