Skip to content

Commit

Permalink
feat: add month and year calculation for indian version
Browse files Browse the repository at this point in the history
  • Loading branch information
sh4hids committed Mar 28, 2022
1 parent 7aacd69 commit 0ff5d0d
Show file tree
Hide file tree
Showing 5 changed files with 297 additions and 52 deletions.
164 changes: 164 additions & 0 deletions src/__tests__/getDay.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,30 @@ const date6 = new Date('January 19 2022 06:22:03');
const date7 = new Date('February 13 2022 06:22:03');
const date8 = new Date('July 17 2022 06:22:03');

const march28 = new Date('March 28 2022 06:22:03');

const april13 = new Date('April 13 2022 06:22:03');
const april14 = new Date('April 14 2022 06:22:03');
const april15 = new Date('April 15 2022 06:22:03');

const may14 = new Date('May 14 2022 06:22:03');
const may15 = new Date('May 15 2022 06:22:03');
const may16 = new Date('May 16 2022 06:22:03');

const june14 = new Date('June 14 2022 06:22:03');
const june15 = new Date('June 15 2022 06:22:03');
const june16 = new Date('June 16 2022 06:22:03');

const july14 = new Date('July 14 2022 06:22:03');
const july15 = new Date('July 15 2022 06:22:03');
const july17 = new Date('July 17 2022 06:22:03');
const july18 = new Date('July 18 2022 06:22:03');

const august15 = new Date('August 15 2022 06:22:03');
const august16 = new Date('August 16 2022 06:22:03');
const august17 = new Date('August 17 2022 06:22:03');
const august18 = new Date('August 18 2022 06:22:03');

test(`converts ${date1} to '১'`, () => {
expect(getDay(date1)).toBe('১');
});
Expand Down Expand Up @@ -52,3 +76,143 @@ test(`converts ${date8} to '৩২'`, () => {
test(`converts ${date8} to '০২'`, () => {
expect(getDay(date8, { format: 'DD', calculationMethod: 'BD' })).toBe('০২');
});

test(`converts ${march28} to '১৪'`, () => {
expect(getDay(march28)).toBe('১৪');
});

test(`converts ${march28} to '১৩'`, () => {
expect(getDay(march28, { calculationMethod: 'IN' })).toBe('১৩');
});

test(`converts ${april13} to '৩০'`, () => {
expect(getDay(april13)).toBe('৩০');
});

test(`converts ${april13} to '২৯'`, () => {
expect(getDay(april13, { calculationMethod: 'IN' })).toBe('২৯');
});

test(`converts ${april14} to '১'`, () => {
expect(getDay(april14)).toBe('১');
});

test(`converts ${april14} to '৩০'`, () => {
expect(getDay(april14, { calculationMethod: 'IN' })).toBe('৩০');
});

test(`converts ${april15} to '২'`, () => {
expect(getDay(april15)).toBe('২');
});

test(`converts ${april15} to '১'`, () => {
expect(getDay(april15, { calculationMethod: 'IN' })).toBe('১');
});

test(`converts ${may14} to '৩১'`, () => {
expect(getDay(may14)).toBe('৩১');
});

test(`converts ${may14} to '৩০'`, () => {
expect(getDay(may14, { calculationMethod: 'IN' })).toBe('৩০');
});

test(`converts ${may15} to '১'`, () => {
expect(getDay(may15)).toBe('১');
});

test(`converts ${may15} to '৩১'`, () => {
expect(getDay(may15, { calculationMethod: 'IN' })).toBe('৩১');
});

test(`converts ${may16} to '২'`, () => {
expect(getDay(may16)).toBe('২');
});

test(`converts ${june14} to '৩১'`, () => {
expect(getDay(june14)).toBe('৩১');
});

test(`converts ${june14} to '৩০'`, () => {
expect(getDay(june14, { calculationMethod: 'IN' })).toBe('৩০');
});

test(`converts ${june15} to '১'`, () => {
expect(getDay(june15)).toBe('১');
});

test(`converts ${june15} to '৩১'`, () => {
expect(getDay(june15, { calculationMethod: 'IN' })).toBe('৩১');
});

test(`converts ${june16} to '২'`, () => {
expect(getDay(june16)).toBe('২');
});

test(`converts ${june16} to '১'`, () => {
expect(getDay(june16, { calculationMethod: 'IN' })).toBe('১');
});

test(`converts ${july14} to '৩০'`, () => {
expect(getDay(july14)).toBe('৩০');
});

test(`converts ${july14} to '২৯'`, () => {
expect(getDay(july14, { calculationMethod: 'IN' })).toBe('২৯');
});

test(`converts ${july15} to '৩১'`, () => {
expect(getDay(july15)).toBe('৩১');
});

test(`converts ${july15} to '৩০'`, () => {
expect(getDay(july15, { calculationMethod: 'IN' })).toBe('৩০');
});

test(`converts ${july17} to '২'`, () => {
expect(getDay(july17)).toBe('২');
});

test(`converts ${july17} to '৩২'`, () => {
expect(getDay(july17, { calculationMethod: 'IN' })).toBe('৩২');
});

test(`converts ${july18} to '৩'`, () => {
expect(getDay(july18)).toBe('৩');
});

test(`converts ${july18} to '১'`, () => {
expect(getDay(july18, { calculationMethod: 'IN' })).toBe('১');
});

test(`converts ${august15} to '৩১'`, () => {
expect(getDay(august15)).toBe('৩১');
});

test(`converts ${august15} to '২৯'`, () => {
expect(getDay(august15, { calculationMethod: 'IN' })).toBe('২৯');
});

test(`converts ${august16} to '১'`, () => {
expect(getDay(august16)).toBe('১');
});

test(`converts ${august16} to '৩০'`, () => {
expect(getDay(august16, { calculationMethod: 'IN' })).toBe('৩০');
});

test(`converts ${august17} to '২'`, () => {
expect(getDay(august17)).toBe('২');
});

test(`converts ${august17} to '৩১'`, () => {
expect(getDay(august17, { calculationMethod: 'IN' })).toBe('৩১');
});

test(`converts ${august18} to '৩'`, () => {
expect(getDay(august18)).toBe('৩');
});

test(`converts ${august18} to '১'`, () => {
expect(getDay(august18, { calculationMethod: 'IN' })).toBe('১');
});
29 changes: 29 additions & 0 deletions src/__tests__/getYear.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,11 @@ const date4 = new Date('xyzdate');

const april14 = new Date('April 14 2021 06:22:03');

const april142022 = new Date('April 14 2022 06:22:03');
const april152022 = new Date('April 15 2022 06:22:03');

const april142024 = new Date('April 14 2024 06:22:03');

test(`converts ${april14} to '১৪২৮'`, () => {
expect(getYear(april14)).toBe('১৪২৮');
});
Expand All @@ -15,6 +20,30 @@ test(`converts ${april14} to '১৪২৭'`, () => {
expect(getYear(april14, { calculationMethod: 'IN' })).toBe('১৪২৭');
});

test(`converts ${april142022} to '১৪২৯'`, () => {
expect(getYear(april142022)).toBe('১৪২৯');
});

test(`converts ${april142022} to '১৪২৮'`, () => {
expect(getYear(april142022, { calculationMethod: 'IN' })).toBe('১৪২৮');
});

test(`converts ${april152022} to '১৪২৯'`, () => {
expect(getYear(april152022)).toBe('১৪২৯');
});

test(`converts ${april152022} to '১৪২৯'`, () => {
expect(getYear(april152022, { calculationMethod: 'IN' })).toBe('১৪২৯');
});

test(`converts ${april142024} to '১৪৩১'`, () => {
expect(getYear(april142024)).toBe('১৪৩১');
});

test(`converts ${april142024} to '১৪৩১'`, () => {
expect(getYear(april142024, { calculationMethod: 'IN' })).toBe('১৪৩১');
});

test(`converts ${date1} to '১৪২৬'`, () => {
expect(getYear(date1)).toBe('১৪২৬');
});
Expand Down
134 changes: 88 additions & 46 deletions src/getDay.ts
Original file line number Diff line number Diff line change
@@ -1,82 +1,124 @@
import { DayOptions } from './types';
import { errorMessage, formatDay, isLeapYear, isValidDate } from './utils';

export function getDay(
date: Date = new Date(),
options: DayOptions = { format: 'D', calculationMethod: 'BD' }
): string {
if (!isValidDate(date)) return errorMessage;

const inputDate = new Date(date);

let result: string;
const day = inputDate.getUTCDate();
const month = inputDate.getMonth();
const year = inputDate.getFullYear();
const { format, calculationMethod = 'BD' } = options;

function getDayBD(day: number, month: number, year: number): number {
let banglaDay: number;
switch (month) {
case 0:
result =
day < 14 ? formatDay(day + 16, format) : formatDay(day - 14, format);
banglaDay = day < 15 ? day + 16 : day - 14;
break;
case 1:
result =
day < 14 ? formatDay(day + 17, format) : formatDay(day - 13, format);
banglaDay = day < 14 ? day + 17 : day - 13;
break;
case 2:
if (day < 15) {
if (isLeapYear(year)) {
result = formatDay(day + 16, format);
} else {
result = formatDay(day + 15, format);
}
if (isLeapYear(year)) {
banglaDay = day < 15 ? day + 16 : day - 14;
} else {
result = formatDay(day - 14, format);
banglaDay = day < 15 ? day + 15 : day - 14;
}
break;
case 3:
result =
day < 14 ? formatDay(day + 17, format) : formatDay(day - 13, format);
banglaDay = day < 14 ? day + 17 : day - 13;
break;
case 4:
result =
day < 15 ? formatDay(day + 17, format) : formatDay(day - 14, format);
banglaDay = day < 15 ? day + 17 : day - 14;
break;
case 5:
result =
day < 15 ? formatDay(day + 17, format) : formatDay(day - 14, format);
banglaDay = day < 15 ? day + 17 : day - 14;
break;
case 6:
if (calculationMethod === 'BD') {
result =
day < 16 ? formatDay(day + 16, format) : formatDay(day - 15, format);
banglaDay = day < 16 ? day + 16 : day - 15;
break;
case 7:
banglaDay = day < 16 ? day + 16 : day - 15;
break;
case 8:
banglaDay = day < 16 ? day + 16 : day - 15;
break;
case 9:
banglaDay = day < 17 ? day + 15 : day - 16;
break;
case 10:
banglaDay = day < 16 ? day + 15 : day - 15;
break;
default:
banglaDay = day < 16 ? day + 15 : day - 15;
break;
}
return banglaDay;
}

function getDayIN(day: number, month: number, year: number): number {
let banglaDay: number;
switch (month) {
case 0:
banglaDay = day < 16 ? day + 15 : day - 15;
break;
case 1:
banglaDay = day < 14 ? day + 16 : day - 13;
break;
case 2:
if (isLeapYear(year)) {
banglaDay = day < 15 ? day + 16 : day - 14;
} else {
banglaDay = day < 16 ? day + 15 : day - 15;
}
break;
case 3:
if (isLeapYear(year)) {
banglaDay = day < 14 ? day + 17 : day - 13;
} else {
result =
day < 18 ? formatDay(day + 15, format) : formatDay(day - 15, format);
banglaDay = day < 15 ? day + 16 : day - 14;
}
break;
case 4:
banglaDay = day < 16 ? day + 16 : day - 15;
break;
case 5:
banglaDay = day < 16 ? day + 16 : day - 15;
break;
case 6:
banglaDay = day < 18 ? day + 15 : day - 17;
break;
case 7:
result =
day < 16 ? formatDay(day + 16, format) : formatDay(day - 15, format);
banglaDay = day < 18 ? day + 14 : day - 17;
break;
case 8:
result =
day < 16 ? formatDay(day + 16, format) : formatDay(day - 15, format);
banglaDay = day < 18 ? day + 14 : day - 17;
break;
case 9:
result =
day < 16 ? formatDay(day + 15, format) : formatDay(day - 16, format);
banglaDay = day < 19 ? day + 13 : day - 18;
break;
case 10:
result =
day < 15 ? formatDay(day + 15, format) : formatDay(day - 15, format);
banglaDay = day < 18 ? day + 13 : day - 17;
break;
case 11:
banglaDay = day < 17 ? day + 13 : day - 16;
break;
default:
result =
day < 15 ? formatDay(day + 15, format) : formatDay(day - 15, format);
banglaDay = day < 15 ? day + 16 : day - 14;
break;
}
return banglaDay;
}

export function getDay(
date: Date = new Date(),
options: DayOptions = { format: 'D', calculationMethod: 'BD' }
): string {
if (!isValidDate(date)) return errorMessage;

const inputDate = new Date(date);

const day = inputDate.getUTCDate();
const month = inputDate.getMonth();
const year = inputDate.getFullYear();
const { format, calculationMethod = 'BD' } = options;
const banglaDay =
calculationMethod === 'BD'
? getDayBD(day, month, year)
: getDayIN(day, month, year);
const result = formatDay(banglaDay, format);

return result;
}
Loading

0 comments on commit 0ff5d0d

Please sign in to comment.