Salve a tutti ormai da giorni non dormo + ho provato di tutto ma non riesco a venirne fuori, vi espongo il mio problema nella speranza che qualcuno possa aiutarmi.
Premessa:
Ho un calendario in ASP(scaricato da un sito e riadattato) che contiene la lista delle prenotazioni di un piccolo albergo con 6 camere quindi con 3 colori identifico la disponibilità di una camera o meno (rosso non disponibile conteggio record >=6, arancione media disponibilità conteggio record >=5 e <= 3, nessun colore disponibile)
Ora la pagina sembra funzionare correttamente per quanto riguarda la data d'inizio(colonna database Start_Date) e la data di fine (colonna End_date), il problema si pone con le date intermedie es:
prenoto dal 14/05/2007 al 20/05/2007
mediante l'istruzuine COUNT di SQL conto quanti record ci sono nella tabella aventi la data di inizio come Start_Date e la data di fine come End_date. Facciamo finta che ci siano 6 record che corrispondano al range di date sopracitato quindi:
ID Start_Date End_Date
- 14/05/2007 20/05/2007
- 14/05/2007 20/05/2007
- 14/05/2007 20/05/2007
- 14/05/2007 20/05/2007
- 14/05/2007 20/05/2007
- 14/05/2007 20/05/2007
nel calendario vengono evidenziate correttamente le 2 date in rosso quella di inizio e quella di fine (come non disponibili) ma le date intermedie no, quindi dal 15/5 al 19/5 la stanza risulta libera.
Ovviamente avrei la necessità che anche queste date intermedie vengano evidenziate in rosso in quanto non sono disponibili.
Se qualcuno fosse così gentile da aiutarmi gliene sarei grato anche perchè ormai sto impazzendo a forza di provare, avevo trovato una funzione di ASP Datediff() (su questo sito) ma sinceramente non so come sfruttarla.
Di seguito posto il codice, grazie a tutti per l'interessamento:
<%
Function GetLastDay(intMonthNum, intYearNum)
Dim dNextStart
If CInt(intMonthNum) = 12 Then
dNextStart = CDate( "1/1/" & intYearNum)
Else
dNextStart = CDate("1/" & intMonthNum + 1 & "/" & intYearNum)
End If
GetLastDay = Day(dNextStart - 1)
End Function
Sub Write_TD(sValue, sClass)
Response.Write " <TD ALIGN='RIGHT' WIDTH=20 HEIGHT=15 VALIGN='BOTTOM' CLASS='" & sClass & "'> " & sValue & "</TD>" & vbCrLf
End Sub
Sub Write_TD2(sValue, sClass)
Response.Write " <TD ALIGN='RIGHT' WIDTH=20 HEIGHT=15 VALIGN='BOTTOM' CLASS='" & sClass & "'> " & sValue & "</TD>" & vbCrLf
End Sub
Sub Write_TD3(sValue, sClass)
Response.Write " <TD ALIGN='RIGHT' WIDTH=20 HEIGHT=15 VALIGN='BOTTOM' CLASS='" & sClass & "'> " & sValue & "</TD>" & vbCrLf
End Sub
' Constants for the days of the week
Const cSUN = 1, cMON = 2, cTUE = 3, cWED = 4, cTHU = 5, cFRI = 6, cSAT = 7
' Get the name of this file
sScript = Request.ServerVariables("SCRIPT_NAME")
' Check for valid month input
If IsEmpty(Request("MONTH")) OR NOT IsNumeric(Request("MONTH")) Then
datToday = Date()
intThisMonth = Month(datToday)
ElseIf CInt(Request("MONTH")) < 1 OR CInt(Request("MONTH")) > 12 Then
datToday = Date()
intThisMonth = Month(datToday)
Else
intThisMonth = CInt(Request("MONTH"))
End If
' Check for valid year input
If IsEmpty(Request("YEAR")) OR NOT IsNumeric(Request("YEAR")) Then
datToday = Date()
intThisYear = Year(datToday)
Else
intThisYear = CInt(Request("YEAR"))
End If
strMonthName = MonthName(intThisMonth)
datFirstDay = DateSerial(intThisYear, intThisMonth, 1)
intFirstWeekDay = WeekDay(datFirstDay, vbSunday)
intLastDay = GetLastDay(intThisMonth, intThisYear)
' Get the previous month and year
intPrevMonth = intThisMonth - 1
If intPrevMonth = 0 Then
intPrevMonth = 12
intPrevYear = intThisYear - 1
Else
intPrevYear = intThisYear
End If
' Get the next month and year
intNextMonth = intThisMonth + 1
If intNextMonth > 12 Then
intNextMonth = 1
intNextYear = intThisYear + 1
Else
intNextYear = intThisYear
End If
' Get the last day of previous month. Using this, find the sunday of
' last week of last month
LastMonthDate = GetLastDay(intLastMonth, intPrevYear) - intFirstWeekDay + 2
NextMonthDate = 1
' Initialize the print day to 1
intPrintDay = 1
%>
<%
Set Rs = Server.CreateObject("ADODB.RecordSet")
dFirstDay = "1/" & intThisMonth & "/" & intThisYear
dLastDay = intLastDay & "/" & intThisMonth & "/" & intThisYear
sSQL = "SELECT Start_Date, End_Date FROM prenotazioni WHERE " & _
"(Start_Date >=#" & dFirstDay & "# AND Start_Date <= #" & dLastDay & "#) " & _
"OR " & _
"(End_Date >=#" & dFirstDay & "# AND End_Date <= #" & dLastDay & "#) " & _
"OR " & _
"(Start_Date < #" & dFirstDay & "# AND End_Date > #" & dLastDay & "# )" & _
"ORDER BY Start_Date"
Rs.Open sSQL, sDSN, adOpenStatic, adLockReadOnly, adCmdText
%>