@webilix/jalali-date-time
Version:
Lightweight library for parsing and formating Jalali date with timezone functionality
49 lines (37 loc) • 1.73 kB
text/typescript
import { JalaliDateTimePeriod } from '../..';
import * as JDate from '../../script/date';
import * as JDT from '../../script/jdt';
const getFriday = (date: Date, timezone?: string): Date => {
date = JDate.getMoment(date, timezone).endOf('D').toDate();
while (JDate.getMoment(date, timezone).weekday() !== 5) {
date = JDate.getMoment(new Date(date.getTime() + 1), timezone)
.endOf('D')
.toDate();
}
return date;
};
const getSaturday = (date: Date, timezone?: string): Date => {
date = JDate.getMoment(date, timezone).startOf('D').toDate();
while (JDate.getMoment(date, timezone).weekday() !== 6) {
date = JDate.getMoment(new Date(date.getTime() - 1), timezone)
.startOf('D')
.toDate();
}
return date;
};
export function periodWeek(weeks: number): JalaliDateTimePeriod;
export function periodWeek(weeks: number, date: Date): JalaliDateTimePeriod;
export function periodWeek(weeks: number, timezone: string): JalaliDateTimePeriod;
export function periodWeek(weeks: number, date: Date, timezone: string): JalaliDateTimePeriod;
export function periodWeek(weeks: number, arg1?: any, arg2?: any): JalaliDateTimePeriod {
if (isNaN(weeks) || weeks < 1) throw new TypeError('Weeks must be bigger than 0');
const { date, timezone } = JDT.date_timezone(arg1, arg2);
let to: Date = getFriday(date, timezone);
const periods: { from: Date; to: Date }[] = [];
while (periods.length < weeks) {
const from: Date = getSaturday(to, timezone);
periods.unshift({ from, to });
to = new Date(from.getTime() - 1);
}
return { from: periods[0].from, to: periods[periods.length - 1].to, periods };
}