- Home
- Categorie
- Coding e Sistemistica
- Altri linguaggi per il web
- [ASP] Problema con calendario in ASP
-
[ASP] Problema con calendario in ASP
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 %>
-
Benvenuto sul forum Ric999.
Ti invito a leggere il regolamento della sezione asp su come postare il codice.Ciao
-
Scusatemi nella fretta non ho letto il regolamento, colgo l'occasione di chiarire il mio problema senza postare codice inutile ed illegibile.
Avrei voluto sapere se qualcuno conosce un modo per contare dei record fra due date mi spiego meglio:
Ho una tabella in access con 3 colonne ID, data inizio e data fine:
ID data_inizio data_fine
1 18/05/2007 20/05/2007
2 17//05/2007 22/05/2007
3 18//05/2007 21/05/2007
etc etc ....
Io conosco una funzione di sql COUNT che ti permette di contare i record di una tabella, ma se io volessi contare quanti record hanno una determinata data intermedia fra data_inizio e data_fine es: 19/05/2007 come faccio?
Qualcuno conosce una qualche funzione di SQL o di ASP in grado di farlo?Grazie
-
sql=" SELECT First(data_inizio) as inizio, First(data_fine) as fine, count(ID)" & _ " From Tabella " & _ " Group by ID " & _ "Having ((First(data_inizio)<=#" & Request("Data-richiesta") & "#)" & _ " AND(First(data_fine)>=#" & Request("Data-richiesta") & "#))"
credo dovrebbe funzionare