tfaker
Version:
Lightweight, Targaryen-themed lil' brother of faker.js
161 lines (146 loc) • 3.51 kB
JavaScript
var gmod = function(n, m) {
return ((n % m) + m) % m;
};
function kuwaiticalendar(adjust) {
var myRes = new Array(8);
var today = new Date();
var day = today.getDate();
var month = today.getMonth();
var year = today.getFullYear();
var m = month + 1;
var y = year;
var a = Math.floor(y / 100);
var b = 2 - a + Math.floor(a / 4);
var jd =
Math.floor(365.25 * (y + 4716)) +
Math.floor(30.6001 * (m + 1)) +
day +
b -
1524;
if (adjust && typeof adjust === "number") {
myRes[0] = day; //calculated day (CE)
myRes[1] = month - 1; //calculated month (CE)
myRes[2] = year; //calculated year (CE)
myRes[3] = jd - 1; //ju
var adjustmili = 1000 * 60 * 60 * 24 * adjust;
var todaymili = today.getTime() + adjustmili;
today = new Date(todaymili);
}
if (m < 3) {
y -= 1;
m += 12;
}
if (y < 1583) {
b = 0;
}
if (y === 1582) {
if (m > 10) {
b = -10;
}
if (m === 10) {
b = 0;
if (day > 4) {
b = -10;
}
}
}
b = 0;
if (jd > 2299160) {
a = Math.floor((jd - 1867216.25) / 36524.25);
b = 1 + a - Math.floor(a / 4);
}
var bb = jd + b + 1524;
var cc = Math.floor((bb - 122.1) / 365.25);
var dd = Math.floor(365.25 * cc);
var ee = Math.floor((bb - dd) / 30.6001);
day = bb - dd - Math.floor(30.6001 * ee);
month = ee - 1;
if (ee > 13) {
cc += 1;
month = ee - 13;
}
year = cc - 4716;
var wd;
if (adjust) {
wd = gmod(jd + 1 - adjust, 7) + 1;
} else {
wd = gmod(jd + 1, 7) + 1;
}
var iyear = 10631 / 30;
var epochastro = 1948084;
// var epochcivil = 1948085; <--- EPOCHCIVIL unused var, if uncomment goto 68
var shift1 = 8.01 / 60;
var z = jd - epochastro;
var cyc = Math.floor(z / 10631);
z = z - 10631 * cyc;
var j = Math.floor((z - shift1) / iyear);
var iy = 30 * cyc + j;
z = z - Math.floor(j * iyear + shift1);
var im = Math.floor((z + 28.5001) / 29.5);
if (im === 13) {
im = 12;
}
var id = z - Math.floor(29.5001 * im - 29);
myRes[0] = day; //calculated day (CE)
myRes[1] = month - 1; //calculated month (CE)
myRes[2] = year; //calculated year (CE)
myRes[3] = jd - 1; //julian day number
myRes[4] = wd - 1; //weekday number
myRes[5] = id; //islamic date
myRes[6] = im - 1; //islamic month
myRes[7] = iy; //islamic year
return myRes;
}
module.exports = function islamicDate(adjustment) {
var wdNames = new Array(
"Ahad",
"Ithnin",
"Thulatha",
"Arbaa",
"Khams",
"Jumuah",
"Sabt"
);
var iMonthNames = new Array(
"Muharram",
"Safar",
"Rabi'ul Awwal",
"Rabi'ul Akhir",
"Jumadal Ula",
"Jumadal Akhira",
"Rajab",
"Sha'ban",
"Ramadan",
"Shawwal",
"Dhul Qa'ada",
"Dhul Hijja"
);
if (adjustment === "zif" || adjustment === "fake") {
var randomPast = kuwaiticalendar(
-Math.round(Math.random() * 90 * 365.2422)
);
var fakeIDate =
wdNames[Math.round(Math.random() * 7)] +
", " +
randomPast[5] +
" " +
iMonthNames[randomPast[6]] +
" " +
randomPast[7] +
" AH";
return fakeIDate;
} else {
var iDate = kuwaiticalendar(adjustment);
var outputIslamicDate =
wdNames[iDate[4]] +
", " +
iDate[5] +
" " +
iMonthNames[iDate[6]] +
" " +
iDate[7] +
" AH";
return outputIslamicDate;
}
};
// original source : https://www.al-habib.info/islamic-calendar/hijricalendartext.htm