• User Newbie

    [ASP] Problema con calendario in ASP

    Salve a tutti ormai da giorni non dormo + image 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

    1. 14/05/2007 20/05/2007
    2. 14/05/2007 20/05/2007
    3. 14/05/2007 20/05/2007
    4. 14/05/2007 20/05/2007
    5. 14/05/2007 20/05/2007
    6. 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 
     
    %> 
    

  • Moderatore

    Benvenuto sul forum Ric999.
    Ti invito a leggere il regolamento della sezione asp su come postare il codice.

    Ciao
    :ciauz:


  • User Newbie

    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


  • Moderatore
    
    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 😉