我的前端工作能力很弱,需要一些帮助。
我正在开发一个基本表格,该表格为用户提供了可用于在接下来的3天(含3天)内预约的时间表选项。
因此,我到目前为止已经写过:
var today = new Date();
var lastday = new Date(today);
lastday.setDate(today.getDate() + 4);
var daterange = getAllDays(today, lastday);
function getAllDays(today, lastday)
{
var s = new Date(today);
var e = new Date(lastday);
var a = [];
//this gets my start time days
while (s < e)
{
//if day Saturday hours change
if(s.getDay() == 0)
{
//if Sunday skip
}
else if (s.getDay() == 6)
{
//push start onto array
a.push(setWorkingHours(s, '10'));
//push end onto array
a.push(setWorkingHours(s, '20'));
}
else
{
//push start onto array
a.push(setWorkingHours(s, '13'));
//push end onto array
a.push(setWorkingHours(s, '20'));
}
s = new Date(s.setDate(s.getDate() + 1))
}
return a;
};
function setWorkingHours(date, hour)
{
var dateTime = new Date();
dateTime.setDate(date.getDate());
dateTime.setHours(hour, '0', '0');
return dateTime;
}
alert(daterange.join('\n'));
Here is a fiddle.
现在,我知道可以使用改进功能,并且我愿意接受任何改进。
因此,上面的代码为我提供了带有开始和停止时间的Days数组。现在,我正在努力弄清楚如何在每天的开始和停止时间中获得一系列小时数。
此外,一旦我有时间,就可以查询Google日历以返回事件,然后将其解析为数组。
接下来的活动:
鲍勃·建设者(2015-08-07T10:00:00-08:00)
约翰·杜(2015-08-08T11:00:00-08:00)
玛丽·简(2015-08-10T18:00:00-08:00)
最后,我需要将可用的数组与预订的数组“相交”,并返回剩余的数组。
至于任命本身。如果有人选择了时间,那么我将安排两个小时的时间。约会可以在小时的顶部或底部开始。
最佳答案
我将使用以下getTimeSlotsForDay
函数的方法来获取给定日期的可用开始时间的数组。
var GoogleCalenderAppointments = null;
var today = new Date();
var lastDay = new Date(today);
lastDay.setDate(today.getDate() + 4);
function checkGoogleCalendarConflict(date) {
var hasConflict = false;
if (!GoogleCalenderAppointments) {
//logic to get scheduled appointments
}
//iterate through relevant scheduled appointments
//if argument `date` has conflict, return true
//else, return false
return hasConflict
}
function getTimeSlotsForDay(date) {
var timeSlots = []
var dayStart = new Date(date)
var dayEnd = new Date(date)
switch (date.getDay()) {
case 0: //Sunday
return timeSlots;
case 6: //Saturday
dayStart.setHours(10, 0, 0, 0)
dayEnd.setHours(20, 0, 0, 0)
break;
default:
dayStart.setHours(13, 0, 0, 0)
dayEnd.setHours(20, 0, 0, 0)
}
do {
if (!checkGoogleCalendarConflict(dayStart)) {
timeSlots.push(new Date(dayStart))
}
dayStart.setHours(dayStart.getHours(), dayStart.getMinutes() + 30)
} while (dayStart < dayEnd);
return timeSlots
}
var message = ""
for (var i = new Date(today); i < lastDay; i.setDate(i.getDate() + 1)) {
message += i.toDateString() + ":\n"
message += getTimeSlotsForDay(i).map(function(it) {
return it.toTimeString();
}).join(",\n") + "\n";
}
alert(message)