Учитывая, что определенный бизнес открыт с 8 утра до 5 вечера, каков наилучший способ убедиться, что данный промежуток времени попадает в этот диапазон? Дата не имеет значения, просто нужно подтвердить, что весь запрошенный интервал времени находится в пределах рабочих часов.
Вот мои примерные данные, с которых я должен начать. (Здесь я использую cfscript просто для краткости)
<cfscript>
// array of given timeslots to test
timeslots = arrayNew(1);
// 1st appointment, entirely within normal business hours
appointment = structNew();
appointment.begin = "10:00 AM";
appointment.end = "2:00 PM";
arrayAppend(timeslots, appointment);
// 2nd appointment, outside of normal business hours
appointment = structNew();
appointment.begin = "7:00 PM";
appointment.end = "9:00 PM";
arrayAppend(timeslots, appointment);
// 3rd appointment, kind of tricky, partly within business hours, still should fail
appointment = structNew();
appointment.begin = "3:00 PM";
appointment.end = "6:00 PM";
arrayAppend(timeslots, appointment);
</cfscript>
Теперь я зациклюсь на этом массиве, запустив функцию проверки для каждой структуры. Для примера это может выглядеть так:
<cfoutput>
<cfloop array="#timeslots#" index="i">
<!--- Should return 'true' or 'false' for each item --->
#myValidator(i.begin, i.end)#<br />
</cfloop>
</cfoutput>
... Итак, вернемся к реальному вопросу ... как мне использовать Coldfusion, чтобы сравнить это время с данными часами работы?
<cfscript>
// if input data is outside of the internal time range, return false, otherwise true
function myValidator(begin, end) {
var businessStart = "8:00 AM";
var businessEnd = "5:00 PM";
var result = false;
// what kind of tests do I put here to compare the times?
}
</cfscript>
ОБНОВЛЕНИЕ: мое решение - переписать myValidator сверху на основе отзывов Бен Дум и Кевинка.
// checks if any scheduled events fall outside business hours
function duringBusinessHours(startTime, endTime) {
var result = true;
var busStart = 800;
var busEnd = 1700;
var startNum = 0;
var endNum = 0;
// convert time string into a simple number:
// "7:00 AM" -> 700 | "3:00 PM" -> 1500
startNum = timeFormat(arguments.startTime, "Hmm");
endNum = timeFormat(arguments.endTime, "Hmm");
// start time must be smaller than end time
if (startNum GTE endNum) {
result = false;
// If start time is outside of business hours, fail
} else if (startNum LT busStart OR startNum GT busEnd) {
result = false;
// If end time is outside of business hours, fail
} else if (endNum LT busStart OR endNum GT busEnd) {
result = false;
}
return result;
}