Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    461

    processo di calcolo in base a date

    Riciao!

    Ho preferito aprire un'altro post anche se abbastanza inerente al mio ultimo inserito riferito alle date....

    devo fare un calcolo abbastanza contorto tra date e costi che mi sta facendo impazzire....
    vi propongo il mio ragionamento, alora:

    Ho un db mysql con una tabella COSTI strutturata

    ID - ID_VI - INIZIO - FINE - COSTO

    dove:

    ID= id del record.

    ID_VI= id della villa associata.

    INIZIO= data di inzio della stagione. (formato DATE)

    FINE= data di fine della stagione.(formato DATE)

    COSTO=costo della stagione

    ora....io voglio prenotare per un tot di giorni e scelgo:

    data di inzio = 05/12/2008
    data di fine= 11/12/2008

    nella tabella COSTI poniamo di avere 2 record cosi':

    ID ID_VI INIZIO FINE COSTO

    1 35 01/12/2008 07/12/2008 600
    2 35 08/12/2008 14/12/2008 300

    ora devo procedere cosi':

    verificare i giorni di arrivo e di andata nella tabella COSTI , in base a questa, calcolare il totale che spendero.

    ho pensato di "tirare fuori" dalla data di inizio e quella di fine(che scelgo io) tutti i giorni che ne intercorrono quindi:

    05/12/2008
    06/12/2008
    07/12/2008
    08/12/2008
    09/12/2008
    10/12/2008
    11/12/2008

    verificare giorno per giorno dove sono collocati nella mia tabella COSTI e , una volta trovata la loro "posizione", verificare il costo del record dove la data si colloca, dividere il costo per i giorni che intercorrono INIZIO e FINE (campi della tabella) e associare il prezzo singolo al giorno che sto verificando....

    non so se sono riuscito a spiegare bene il procedimento...figuratevi a metterlo in pratica!

    volevo sapere se è corretto come ragionamento...ho magari esiste qualche stratagemma per velocizzare la cosa.

    Sono aperto a dritte o consigli su come poter procedere al meglio!

    Grazie!

  2. #2
    Utente di HTML.it L'avatar di Mizushi
    Registrato dal
    Aug 2005
    Messaggi
    1,125
    vista la complessità prendi carta e penna e butta giù come faresti tutto questo calcolo "a mano" e poi per trasformarlo in asp magari si dà un aiuto...

  3. #3
    cavolo ce l'avevo un algoritmo così ma ora non ce l'ho piu che ho perso un sacco di roba una volta!!!

    cmq, il problema sta a ricordarsi che avevo fatto.. allora... no aspè ora che ci penso la mia situazione era differente, perchè io avevo la disponibilità delle ville da una parte e i costi da un'altra parte perchè erano divisi per stagione/settimane/domeniche/festività.. un casino.. quindi facevo una query per trovare la disponibilità per il range di date scelte, poi per ogni villa mi sa che ne calcolavo il prezzo confrontando le date con i periodi dei prezzi...

    però così mi pare troppo facile la cosa, mi sa che era piu complessa :master: forse facevo tutto in una botta con una serie di sottoquery :master:

    una curiosità: visto che il costo a stagione è a tipologia di villa al piu, che ci fa il costo e la stagione nella stessa tabella assieme alla villa?

    boh magari a mente lucida ci ripenso
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  4. #4
    Utente di HTML.it L'avatar di Mizushi
    Registrato dal
    Aug 2005
    Messaggi
    1,125
    Originariamente inviato da Santino83_02
    cavolo ce l'avevo un algoritmo così ma ora non ce l'ho piu che ho perso un sacco di roba una volta!!!
    Se dovessi ritrovarlo... POSTALO !!!!

  5. #5
    Originariamente inviato da Mizushi
    Se dovessi ritrovarlo... POSTALO !!!!
    mah faccio prima a riscriverlo ad averci tempo
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  6. #6
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    461
    allora...sono fermo ad un punto...ho cominciato il ragionamento "scremando" le date di inizio e di fine ottenendo così tutti i giorni che intercorrono tra le due date INIZIO e FINE della tabella COSTI:


    <%
    sql="SELECT * FROM COSTI WHERE ID_VI='35'"
    aprirs sql
    do until rs.eof
    d=zer&day(rs("inizio"))+e
    m=zerm&Month(rs("inizio"))

    night=(DateDiff("d", rs("inizio"), rs("fine")))
    for e=0 to night
    if len(day(rs("inizio"))+e)=1 then
    zer="0"
    else
    zer=""
    end if

    if len(Month(rs("inizio")))=1 then
    zerm="0"
    else
    zerm=""
    end if

    d=zer&day(rs("inizio"))+e
    m=zerm&Month(rs("inizio"))
    %>
    <%=Year(rs("inizio"))&"-"&m&"-"&d%>

    <%
    next%>
    <hr />
    <%
    rs.movenext
    loop
    %>

    cè un problema però....

    quando le due date sono ad esempio:

    INIZIO = 2008-12-29
    FINE = 2009-01-05

    con questo mio ciclo mi restituisce, giustamente:

    2008-12-29
    2008-12-30
    2008-12-31
    2008-12-32
    2008-12-33
    2008-12-34
    2008-12-35
    2008-12-36

    il mio problema penso sia abbastanza chiaro....come faccio a dire al ciclo, quando arrivi al numero massimo di giorni di quello specifico mese, di ripartire da 1? idem per mese e anno..

    dai raga!che se risucite a risolvermi questo problemino vi posto il codice visto che sono riuscito a farlo funzionare!!!(sempre con questo piccolo bugghino del cambio anno e mese)

  7. #7
    il ciclo sulle date si fa con dateAdd
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  8. #8
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    461
    ok ho provato cosi':

    <%
    sql="SELECT * FROM COSTI WHERE ID_VI='35'"
    aprirs sql
    do until rs.eof
    night=(DateDiff("d", rs("inizio"), rs("fine")))
    for e=0 to night
    if len(day(rs("inizio"))+e)=1 then
    zer="0"
    else
    zer=""
    end if

    if len(Month(rs("inizio")))=1 then
    zerm="0"
    else
    zerm=""
    end if

    d=zer&day(rs("inizio"))+e
    m=zerm&Month(rs("inizio"))
    %>
    <%data=d&"-"&m&"-"&Year(rs("inizio"))%>
    <%=DateAdd("d", 0, data)%>

    <%
    next%>
    <hr />
    <%
    rs.movenext
    loop
    %>

    funziona...

    pero quando arrivo al punto in cui cambia il mese mi da errore:

    Microsoft VBScript runtime error '800a000d'

    Type mismatch: 'data'

    e fa riferimaneto alla riga

    <%=DateAdd("d", 0, data)%>

  9. #9
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    461
    risolto scusate...

    <%=DateAdd("d", e, (Year(rs("inizio"))&"-"&zerm&Month(rs("inizio"))&"-"&zer&day(rs("inizio"))))%>

    e finalmente ecco il codice finzle funzionante!!

    <%
    i=request("i")
    f=request("f")
    notti=(DateDiff("d", i, f))
    for c=0 to notti
    if len(day(i)+c)=1 then
    zer="0"
    else
    zer=""
    end if

    if len(Month(i))=1 then
    zerm="0"
    else
    zerm=""
    end if

    %>
    <%
    sql="SELECT * FROM COSTI WHERE ID_VI='35'"
    aprirs sql
    do until rs.eof
    night=(DateDiff("d", rs("inizio"), rs("fine")))
    for e=0 to night
    if len(day(rs("inizio"))+e)=1 then
    zer="0"
    else
    zer=""
    end if

    if len(Month(rs("inizio")))=1 then
    zerm="0"
    else
    zerm=""
    end if
    %>

    <%if (DateAdd("d", c, (Year(i)&"-"&zerm&Month(i)&"-"&zer&day(i)))) = (DateAdd("d", e, (Year(rs("inizio"))&"-"&zerm&Month(rs("inizio"))&"-"&zer&day(rs("inizio"))))) then%>
    <%
    tariffa=rs("costo")/(night+1)
    prezzo=prezzo+tariffa
    %>
    <%end if%>

    <%
    next%>
    <%
    rs.movenext
    loop
    %>
    <%next%>

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.