change date type for req & design and fields & add requests & fix bug appointment and dashboard
This commit is contained in:
+192
@@ -224,3 +224,195 @@ export const removeAdditionalKeysDashboard = (information) => {
|
||||
|
||||
return usedKays;
|
||||
};
|
||||
|
||||
// handle TimeStamp
|
||||
|
||||
function div(a, b) {
|
||||
return Math.floor(a / b);
|
||||
}
|
||||
|
||||
function isLeapGregorian(year) {
|
||||
return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;
|
||||
}
|
||||
|
||||
function dayOfYearToGregorian(year, dayOfYear) {
|
||||
const monthDays = [
|
||||
31,
|
||||
isLeapGregorian(year) ? 29 : 28,
|
||||
31,
|
||||
30,
|
||||
31,
|
||||
30,
|
||||
31,
|
||||
31,
|
||||
30,
|
||||
31,
|
||||
30,
|
||||
31,
|
||||
];
|
||||
let month = 1;
|
||||
while (dayOfYear > monthDays[month - 1]) {
|
||||
dayOfYear -= monthDays[month - 1];
|
||||
month++;
|
||||
}
|
||||
return { month, day: dayOfYear };
|
||||
}
|
||||
|
||||
function jalaliToGregorian(jy, jm, jd) {
|
||||
jy = parseInt(jy);
|
||||
jm = parseInt(jm);
|
||||
jd = parseInt(jd);
|
||||
|
||||
const breaks = [
|
||||
-61, 9, 38, 199, 426, 686, 756, 818, 1111, 1181, 1210, 1635, 2060, 2097,
|
||||
2192, 2262, 2324, 2394, 2456, 3178,
|
||||
];
|
||||
|
||||
let gy = jy + 621;
|
||||
let leapJ = -14;
|
||||
let jp = breaks[0];
|
||||
let jump, i;
|
||||
|
||||
for (i = 1; i < breaks.length; i++) {
|
||||
jump = breaks[i] - jp;
|
||||
if (jy < breaks[i]) break;
|
||||
leapJ += div(jump, 33) * 8 + div(jump % 33, 4);
|
||||
jp = breaks[i];
|
||||
}
|
||||
|
||||
let nYear = jy - jp;
|
||||
leapJ += div(nYear, 33) * 8 + div((nYear % 33) + 3, 4);
|
||||
if (jump % 33 === 4 && jump - nYear === 4) leapJ += 1;
|
||||
|
||||
let leapG = div(gy, 4) - div((div(gy, 100) + 1) * 3, 4) - 150;
|
||||
let march = 20 + leapJ - leapG;
|
||||
|
||||
let gregorianYear = gy;
|
||||
let gregorianMonth, gregorianDay;
|
||||
|
||||
let jalaliDayOfYear = jm <= 7 ? (jm - 1) * 31 + jd : (jm - 7) * 30 + 186 + jd;
|
||||
|
||||
if (jalaliDayOfYear <= march) {
|
||||
gregorianYear -= 1;
|
||||
const daysInPrevYear = isLeapGregorian(gregorianYear) ? 366 : 365;
|
||||
const dayOfYear = daysInPrevYear - (march - jalaliDayOfYear);
|
||||
const gDate = dayOfYearToGregorian(gregorianYear, dayOfYear);
|
||||
gregorianMonth = gDate.month;
|
||||
gregorianDay = gDate.day;
|
||||
} else {
|
||||
const dayOfYear = jalaliDayOfYear - march;
|
||||
const gDate = dayOfYearToGregorian(gregorianYear, dayOfYear);
|
||||
gregorianMonth = gDate.month;
|
||||
gregorianDay = gDate.day;
|
||||
}
|
||||
|
||||
return { gy: gregorianYear, gm: gregorianMonth, gd: gregorianDay };
|
||||
}
|
||||
|
||||
function gregorianToJalali(gy, gm, gd) {
|
||||
gy = parseInt(gy);
|
||||
gm = parseInt(gm);
|
||||
gd = parseInt(gd);
|
||||
|
||||
const breaks = [
|
||||
-61, 9, 38, 199, 426, 686, 756, 818, 1111, 1181, 1210, 1635, 2060, 2097,
|
||||
2192, 2262, 2324, 2394, 2456, 3178,
|
||||
];
|
||||
|
||||
let jy = 0;
|
||||
let leapJ = -14;
|
||||
let jp = breaks[0];
|
||||
let jump, i;
|
||||
|
||||
for (i = 1; i < breaks.length; i++) {
|
||||
jump = breaks[i] - jp;
|
||||
if (gy < breaks[i]) break;
|
||||
leapJ += div(jump, 33) * 8 + div(jump % 33, 4);
|
||||
jp = breaks[i];
|
||||
}
|
||||
|
||||
let nYear = gy - jp;
|
||||
leapJ += div(nYear, 33) * 8 + div((nYear % 33) + 3, 4);
|
||||
if (jump % 33 === 4 && jump - nYear === 4) leapJ += 1;
|
||||
|
||||
let leapG = div(gy, 4) - div((div(gy, 100) + 1) * 3, 4) - 150;
|
||||
let march = 20 + leapJ - leapG;
|
||||
|
||||
let gregorianDayOfYear = dayOfYear(gy, gm, gd);
|
||||
let jalaliDayOfYear, jyNew;
|
||||
|
||||
if (gregorianDayOfYear > march) {
|
||||
jalaliDayOfYear = gregorianDayOfYear - march;
|
||||
jyNew = gy - 621;
|
||||
} else {
|
||||
let daysInPrevYear = isLeapGregorian(gy - 1) ? 366 : 365;
|
||||
jalaliDayOfYear = gregorianDayOfYear + daysInPrevYear - march;
|
||||
jyNew = gy - 622;
|
||||
}
|
||||
|
||||
let jmNew, jdNew;
|
||||
if (jalaliDayOfYear <= 186) {
|
||||
jmNew = Math.ceil(jalaliDayOfYear / 31);
|
||||
jdNew = jalaliDayOfYear % 31;
|
||||
if (jdNew === 0) jdNew = 31;
|
||||
} else {
|
||||
jalaliDayOfYear -= 186;
|
||||
jmNew = Math.ceil(jalaliDayOfYear / 30) + 6;
|
||||
jdNew = jalaliDayOfYear % 30;
|
||||
if (jdNew === 0) jdNew = 30;
|
||||
}
|
||||
|
||||
return { jy: jyNew, jm: jmNew, jd: jdNew };
|
||||
}
|
||||
|
||||
function dayOfYear(year, month, day) {
|
||||
const monthDays = [
|
||||
31,
|
||||
isLeapGregorian(year) ? 29 : 28,
|
||||
31,
|
||||
30,
|
||||
31,
|
||||
30,
|
||||
31,
|
||||
31,
|
||||
30,
|
||||
31,
|
||||
30,
|
||||
31,
|
||||
];
|
||||
let doy = 0;
|
||||
for (let i = 1; i < month; i++) {
|
||||
doy += monthDays[i - 1];
|
||||
}
|
||||
doy += day;
|
||||
return doy;
|
||||
}
|
||||
|
||||
export function convertJalaliTimestamp(input, convertToTimestamp) {
|
||||
if (convertToTimestamp) {
|
||||
// input = { jy, jm, jd, hour?, minute?, second? }
|
||||
const { jy, jm, jd, hour = 0, minute = 0, second = 0 } = input;
|
||||
const { gy, gm, gd } = jalaliToGregorian(jy, jm, jd);
|
||||
const date = new Date(gy, gm - 1, gd, hour, minute, second);
|
||||
return Math.floor(date.getTime() / 1000);
|
||||
} else {
|
||||
const date = new Date(input * 1000);
|
||||
const gy = date.getFullYear();
|
||||
const gm = date.getMonth() + 1;
|
||||
const gd = date.getDate();
|
||||
const hour = date.getHours();
|
||||
const minute = date.getMinutes();
|
||||
const second = date.getSeconds();
|
||||
const { jy, jm, jd } = gregorianToJalali(gy, gm, gd);
|
||||
return { jy, jm, jd, hour, minute, second };
|
||||
}
|
||||
}
|
||||
|
||||
const timestamp = convertJalaliTimestamp(
|
||||
{ jy: 1404, jm: 4, jd: 3, hour: 22, minute: 36, second: 10 },
|
||||
true
|
||||
);
|
||||
console.log(timestamp);
|
||||
|
||||
const jalaliDate = convertJalaliTimestamp(1750791970, false);
|
||||
console.log(jalaliDate);
|
||||
|
||||
Reference in New Issue
Block a user