205 lines
4.6 KiB
JavaScript
205 lines
4.6 KiB
JavaScript
// Generated by CoffeeScript 1.12.5
|
|
'use strict';
|
|
moment.fn.isHoliday = function() {
|
|
var locale;
|
|
locale = this.localeData();
|
|
if (locale._holidays) {
|
|
if (locale._holidays.indexOf(this.format(locale._holidayFormat)) >= 0) {
|
|
return true;
|
|
}
|
|
}
|
|
if (locale.holiday) {
|
|
if (locale.holiday(this)) {
|
|
return true;
|
|
} else {
|
|
return false;
|
|
}
|
|
}
|
|
return false;
|
|
};
|
|
|
|
moment.fn.isBusinessDay = function(options) {
|
|
var defaultWorkingWeekdays, locale, workingWeekdays;
|
|
locale = this.localeData();
|
|
defaultWorkingWeekdays = [1, 2, 3, 4, 5];
|
|
workingWeekdays = options.business_days || locale._workingWeekdays || defaultWorkingWeekdays;
|
|
if (this.isHoliday()) {
|
|
return false;
|
|
}
|
|
if (workingWeekdays.indexOf(this.day()) >= 0) {
|
|
return true;
|
|
}
|
|
return false;
|
|
};
|
|
|
|
moment.fn.businessDaysIntoMonth = function() {
|
|
var businessDay, businessDaysIntoMonth, monthBusinessDays;
|
|
businessDay = this.isBusinessDay() ? this : this.prevBusinessDay();
|
|
monthBusinessDays = businessDay.monthBusinessDays();
|
|
businessDaysIntoMonth = void 0;
|
|
monthBusinessDays.map(function(day, index) {
|
|
if (day.format('M/DD/YY') === businessDay.format('M/DD/YY')) {
|
|
businessDaysIntoMonth = index + 1;
|
|
}
|
|
});
|
|
return businessDaysIntoMonth;
|
|
};
|
|
|
|
moment.fn.businessDiff = function(param) {
|
|
var d1, d2, daysBetween, end, start;
|
|
d1 = this.clone();
|
|
d2 = param.clone();
|
|
start = d1 < d2 ? d1 : d2;
|
|
end = d2 > d1 ? d2 : d1;
|
|
daysBetween = 0;
|
|
if (start === end) {
|
|
return daysBetween;
|
|
}
|
|
while (start < end) {
|
|
if (start.isBusinessDay()) {
|
|
daysBetween++;
|
|
}
|
|
start.add(1, 'd');
|
|
}
|
|
return daysBetween;
|
|
};
|
|
|
|
moment.fn.businessAdd = function(number, options) {
|
|
var day, remaining, signal;
|
|
if (options == null) {
|
|
options = {};
|
|
}
|
|
options.period || (options.period = 'days');
|
|
day = this.clone();
|
|
signal = number < 0 ? -1 : 1;
|
|
remaining = Math.abs(number);
|
|
while (remaining) {
|
|
day.add(signal, options.period);
|
|
if (day.isBusinessDay(options)) {
|
|
remaining--;
|
|
}
|
|
}
|
|
return day;
|
|
};
|
|
|
|
moment.fn.businessSubtract = function(number, options) {
|
|
if (options == null) {
|
|
options = {};
|
|
}
|
|
return this.businessAdd(-number, options);
|
|
};
|
|
|
|
moment.fn.nextBusinessDay = function() {
|
|
var iterator, limit;
|
|
iterator = 1;
|
|
limit = 7;
|
|
while (iterator < limit) {
|
|
if (this.add(1, 'd').isBusinessDay()) {
|
|
break;
|
|
}
|
|
iterator++;
|
|
}
|
|
return this;
|
|
};
|
|
|
|
moment.fn.prevBusinessDay = function() {
|
|
var iterator, limit;
|
|
iterator = 1;
|
|
limit = 7;
|
|
while (iterator < limit) {
|
|
if (this.subtract(1, 'd').isBusinessDay()) {
|
|
break;
|
|
}
|
|
iterator++;
|
|
}
|
|
return this;
|
|
};
|
|
|
|
moment.fn.monthBusinessDays = function(partialEndDate) {
|
|
var day, daysArr, done, end, me;
|
|
me = this.clone();
|
|
day = me.clone().startOf('month');
|
|
end = partialEndDate ? partialEndDate : me.clone().endOf('month');
|
|
daysArr = [];
|
|
done = false;
|
|
while (!done) {
|
|
if (day.isBusinessDay()) {
|
|
daysArr.push(day.clone());
|
|
}
|
|
if (end.diff(day.add(1, 'd')) < 0) {
|
|
done = true;
|
|
}
|
|
}
|
|
return daysArr;
|
|
};
|
|
|
|
moment.fn.monthNaturalDays = function(fromToday) {
|
|
var day, daysArr, done, end, me;
|
|
me = this.clone();
|
|
day = fromToday ? me.clone() : me.clone().startOf('month');
|
|
end = me.clone().endOf('month');
|
|
daysArr = [];
|
|
done = false;
|
|
while (!done) {
|
|
daysArr.push(day.clone());
|
|
if (end.diff(day.add(1, 'd')) < 0) {
|
|
done = true;
|
|
}
|
|
}
|
|
return daysArr;
|
|
};
|
|
|
|
moment.fn.monthBusinessWeeks = function(fromToday) {
|
|
var day, daysArr, done, end, me, weeksArr;
|
|
me = this.clone();
|
|
day = fromToday ? me.clone() : me.clone().startOf('month');
|
|
end = me.clone().endOf('month');
|
|
weeksArr = [];
|
|
daysArr = [];
|
|
done = false;
|
|
while (!done) {
|
|
if (day.day() >= 1 && day.day() < 6) {
|
|
daysArr.push(day.clone());
|
|
}
|
|
if (day.day() === 5) {
|
|
weeksArr.push(daysArr);
|
|
daysArr = [];
|
|
}
|
|
if (end.diff(day.add(1, 'd')) < 0) {
|
|
if (daysArr.length < 5) {
|
|
weeksArr.push(daysArr);
|
|
}
|
|
done = true;
|
|
}
|
|
}
|
|
return weeksArr;
|
|
};
|
|
|
|
moment.fn.monthNaturalWeeks = function(fromToday) {
|
|
var day, daysArr, done, end, me, weeksArr;
|
|
me = this.clone();
|
|
day = fromToday ? me.clone() : me.clone().startOf('month');
|
|
end = me.clone().endOf('month');
|
|
weeksArr = [];
|
|
daysArr = [];
|
|
done = false;
|
|
while (!done) {
|
|
daysArr.push(day.clone());
|
|
if (day.day() === 6) {
|
|
weeksArr.push(daysArr);
|
|
daysArr = [];
|
|
}
|
|
if (end.diff(day.add(1, 'd')) < 0) {
|
|
if (daysArr.length < 7) {
|
|
weeksArr.push(daysArr);
|
|
}
|
|
done = true;
|
|
}
|
|
}
|
|
return weeksArr;
|
|
};
|
|
|
|
if (typeof module !== 'undefined' && module.exports) {
|
|
module.exports = moment;
|
|
}
|