zettapi_client
Version:
Admin panel and client-side CRUD operations in angular to use with zettapi_server rest api to get started quickly in any CMS project.
160 lines (135 loc) • 4.06 kB
JavaScript
app.factory('$date', function (moment) {
var factory = {};
factory.collisionDetection = function (start, end, events) {
start = moment(start).format('YYYY-MM-DD');
end = end ? moment(end).format('YYYY-MM-DD') : start;
if (end < start) {
return null;
}
for (var i = 0; i < events.length; i++) {
/*
if (events[i].approval) {
if (events[i].approval.cancelled) {
continue;
}
if (events[i].approval.level < events[i].approval.maxLevel) {
continue;
}
}
*/
var eventStart = moment(events[i].dateStart).format('YYYY-MM-DD');
var eventEnd = eventStart;
if (events[i].dateEnd) {
eventEnd = moment(events[i].dateEnd).format('YYYY-MM-DD');
}
// $ |__$__|
if (eventEnd > start && eventEnd <= end) {
return true;
}
// |__$__| $
if (eventStart >= start && eventStart < end) {
return true;
}
// $ |____| $
if (eventStart <= start && eventEnd >= end) {
return true;
}
// |___$___$____|
if (eventStart >= start && eventEnd <= end) {
return true;
}
}
return false;
};
factory.extractMinutes = function (time) {
try {
return factory.pad(time.getHours()) + ':' + factory.pad(time.getMinutes());
}
catch (err) {
time = new Date(time);
return factory.pad(time.getHours()) + ':' + factory.pad(time.getMinutes());
}
};
factory.calculateTimespan = function (startTimestamp, endTimestamp) {
var end;
if (endTimestamp) {
end = moment(endTimestamp);
}
else {
end = moment();
}
var start = new Date(startTimestamp);
var duration = moment.duration(end.diff(start));
return duration.asMinutes().toFixed(2);
};
factory.totalMinutes = function (timeString) {
var HourMinutes = timeString.split(':');
if (HourMinutes.length == 1) {
HourMinutes.push(0);
}
var hours = parseInt(HourMinutes[0]);
var minutes = parseInt(HourMinutes[1]);
return hours * 60 + minutes;
};
factory.pad = function (number, count) {
var res = number + "";
count = count || 2;
while (res.length < count) {
res = "0" + res;
}
return res;
};
factory.getTotalMinutes = function (time) {
var HourMinutes = time.split(':');
if (HourMinutes.length === 0 || HourMinutes.length > 2) {
return null;
}
if (HourMinutes.length == 1) {
HourMinutes.push(0);
}
var hours = parseInt(HourMinutes[0]);
if (hours < 0 || hours > 23) {
return null;
}
var minutes = parseInt(HourMinutes[1]);
if (minutes < 0 || minutes > 59) {
return null;
}
return hours * 60 + minutes;
};
factory.getWeekNumber = function (d) {
// Copy date so don't modify original
d = new Date(+d);
d.setHours(0, 0, 0);
// Set to nearest Thursday: current date + 4 - current day number
// Make Sunday's day number 7
d.setDate(d.getDate() + 4 - (d.getDay() || 7));
// Get first day of year
var yearStart = new Date(d.getFullYear(), 0, 1);
// Calculate full weeks to nearest Thursday
var weekNo = Math.ceil((((d - yearStart) / 86400000) + 1) / 7);
// Return array of year and week number
return [d.getFullYear(), weekNo];
};
factory.weeksInYear = function (year) {
var month = 11, day = 31, week;
// Find week that 31 Dec is in. If is first week, reduce date until
// get previous week.
do {
d = new Date(year, month, day--);
week = factory.getWeekNumber(d)[1];
} while (week == 1);
return week;
};
factory.getDateOfISOWeek = function (w, y) {
var simple = new Date(y, 0, 1 + (w - 1) * 7);
var dow = simple.getDay();
var ISOweekStart = simple;
if (dow <= 4)
ISOweekStart.setDate(simple.getDate() - simple.getDay() + 1);
else
ISOweekStart.setDate(simple.getDate() + 8 - simple.getDay());
return ISOweekStart;
};
return factory;
});