UNPKG

react-native-calendars-jalaali

Version:
150 lines (121 loc) 3.34 kB
const Moment = require('moment'); const jMoment = require('moment-jalaali-react-native-calendar'); const enLocale = require('moment/locale/en-gb'); function sameMonth(a, b) { return a instanceof Moment && b instanceof Moment && a.jYear() === b.jYear() && a.jMonth() === b.jMonth(); } function isGTE(a, b) { return b.diff(a, 'days') < 1; } function isLTE(a, b) { return a.diff(b, 'days') < 1; } function fromTo(a, b) { const days = []; let from = +a, to = +b; for (; from <= to; from = new jMoment(from).add(1, 'days').valueOf()) { days.push(new jMoment(from).locale('en-gb', enLocale)); } return days; } function month(xd) { const year = xd.jYear(), month = xd.jMonth(); const days = jMoment.jDaysInMonth(year, month); const str = year + '-' + (month + 1); const firstDay = jMoment.utc(str + '-1T00:00:00', 'jYYYY-jM-jDTHH:mm:ss'); const lastDay = jMoment.utc(str + '-' + days + 'T00:00:00', 'jYYYY-jM-jDTHH:mm:ss'); return fromTo(firstDay, lastDay); } function weekDayNames(firstDayOfWeek = 0) { let weekDaysNames = jMoment.weekdaysMin(); const dayShift = (firstDayOfWeek - 1) % 7; if (dayShift) { weekDaysNames = weekDaysNames.slice(dayShift).concat(weekDaysNames.slice(0, dayShift)); } return weekDaysNames; } function dayOfWeek(xd) { return ((xd.day() + 1) % 7); } function page(xd, firstDayOfWeek) { const days = month(xd); let before = [], after = []; const fdow = ((7 + firstDayOfWeek) % 7) || 7; const ldow = (fdow + 6) % 7; firstDayOfWeek = firstDayOfWeek || 0; const from = days[0].clone(); if (dayOfWeek(from) !== fdow) { from.add(-(dayOfWeek(from) + 7 - fdow) % 7, 'days'); } const to = days[days.length - 1].clone(); const day = dayOfWeek(to); if (day !== ldow) { to.add((ldow + 7 - day) % 7, 'days'); } if (isLTE(from, days[0])) { before = fromTo(from, days[0]); } if (isGTE(to, days[days.length - 1])) { after = fromTo(days[days.length - 1], to); } return before.concat(days.slice(1, days.length - 1), after); } function rangeDate(date, range) { return date.clone().add(range, 'jMonths'); } function formatMonthYear(date) { return date.format('jMMMM jYYYY'); } function monthYearFormat() { return 'jMMMM jYYYY'; } function diffMonths(date1, date2) { return date1.diff(date2, 'jMonths'); } function firstDayOfMonth(date) { return date.clone().jDate(1); } function addMonths(date, month) { return date.clone().add(month, 'jMonths'); } function utc() { return jMoment().utc(); } function weekNumber(date) { return date.jWeek(); } function dayOfMonth(date) { return englishToPersian(date.jDate()); } function englishToPersian(number) { return number.toString().replace(/\d+/g, function (digit) { const enDigitArr = [], peDigitArr = []; for (let i = 0; i < digit.length; i++) { enDigitArr.push(digit.charCodeAt(i)); } for (let j = 0; j < enDigitArr.length; j++) { peDigitArr.push(String.fromCharCode(enDigitArr[j] + ((!!number && number === true) ? 1584 : 1728))); } return peDigitArr.join(''); }); } module.exports = { weekDayNames, sameMonth, month, page, fromTo, isLTE, isGTE, rangeDate, formatMonthYear, monthYearFormat, diffMonths, firstDayOfMonth, addMonths, utc, weekNumber, dayOfMonth };