Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    [as2] calcolare prezzo in base al mese

    sto sviluppando un sito per un attività di bed & breakfast.
    in questo sito c'è una sezione con dei form di testo da compilare con le informazioni della persona che richiede la stanza che poi tramite php invieranno i dati all'email del b&b.

    ora: dovrei sviluppare una funzione matematica che automaticamente renda visibile il prezzo in uno dei box di testo (non scrivibile dall utente) in base alle info che lui aggiunge:

    il prezzo varia in base all'alta e alla bassa stagione (quindi supponiamo che esista un intervallo di tot mesi in cui il prezzo è X e un altro intervallo in cui il prezzo è Y).
    c'è un campo compilabile che si chiama "data di arrivo" e uno che si chiama "data di partenza" entrambi composti da 3 box di testo (giorno/mese/anno).
    tramite un calendario dovrei fare un operazione di questo genere:

    giorno di partenza - giorno di arrivo --> mi restituisce il numero di notti.
    calcolo del numero inserito in "mese" --> mi restituisce se il prezzo è X o Y
    numero di notti * prezzo --> mostra il preventivo in un nuovo campo di testo.

    questo a livello teorico.

    e a livello pratico?



    grazie in anticipo. spero di essere stato chiaro

  2. #2
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    Da sviluppare, ma i calcoli ci sono già tutti:

    Codice PHP:
    var arrivo:Number Date.UTC(2009,8,3);
    var 
    partenza:Number Date.UTC(2009,8,7);
    var 
    notti:Number = ((partenza arrivo)/1000/60/60/24);
    var 
    prezzo:Number = (new Date(arrivo).getMonth() > || new Date(arrivo).getMonth() < 4) ? 35 50;
    var 
    totale:Number prezzo*notti;
    trace("Il prezzo totale per il periodo scelto ("+notti+" notti) è di "+totale+",00 Euro."); 
    Crei due date a partire dai dati che hai nei campi di testo, con il metodo statico Date.UTC(), poi sottrai la partenza all'arrivo ottenendo i millisecondi e dividendoli in successione una volta per 1000, due volte per 60 e una per 24, ottieni il numero di giorni di differenza tra le due date. A questo punto crei una variabile prezzo per cui verifichi che il mese sia maggiore di 8 o minore di 4 (quindi se si prenota da settembre a marzo) e gli dai il prezzo basso, altrimenti quello alto. Per ultima cosa crei una variabile in cui moltiplichi il valore del prezzo per quello delle notti e ottieni il prezzo totale da pagare.

    Ci sarebbe giusto un'eccezione da verificare, ossia: cosa succede quando c'è una prenotazione che inizia nella bassa stagione e finisce in quella alta, e viceversa?.

  3. #3
    innanzitutto grazie mille

    come faccio a fare in modo che anno,mese e giorno nelle "new Date" create, corrispondano all'input che inserisco nei campi di testo?

    io ho provato nella seguente maniera ma il risultato non c'è:

    ho creato 3 campi di testo input instanziati col nome di "dArrivo", "mArrivo", "yArrivo" (giorno, mese e anno di arrivo), e tre campi di testo input instanziati col nome di "dPartenza", "mPartenza" e "yPartenza".
    infine un ultimo box di testo dinamico instnziato col nome di "notti".

    ho creato un movieclip a cui ho aggiunto il seguente codice:

    Codice:
    Codice PHP:
    on (release) {
        
    _root.d_arrivo.input dArrivo;
        
    _root.m_arrivo.input mArrivo;
        
    _root.y_arrivo.input yArrivo;
        
    _root.d_partenza.input dPartenza;
        
    _root.m_partenza.input mPartenza;
        
    _root.y_partenza.input yPartenza;
        
    var 
    data_arrivo:Date = new Date(yArrivo,mArrivo,dArrivo);
    var 
    arrivo_time data_arrivo.getTime();

    var 
    data_partenza:Date = new Date(yPartenza,mPartenza,dPartenza);
    var 
    partenza_time data_partenza.getTime();

    var 
    timeLeft partenza_time arrivo_time;

    var 
    sec timeLeft/1000;
    var 
    min sec/60;
    var 
    hrs min/60;
    var 
    days hrs/24;
    sec string(sec 60);
    min string(min 60);
    hrs string(hrs 24);
    days string(days);
    _root.notti.text days;


    perchè non funziona?

  4. #4
    forse sono riuscito a semirisolvere mettendo ad un mc bottone il seguente codice:

    Codice PHP:
    on (release) {
        var 
    arrivo:Number Date.UTC(_root.y_arrivo.text_root.m_arrivo.text_root.d_arrivo.text);
        var 
    partenza:Number Date.UTC(_root.y_partenza.text_root.m_partenza.text_root.d_partenza.text);
        var 
    notti:Number = ((partenza-arrivo)/1000/60/60/24);
        var 
    prezzo:Number = (new Date(arrivo).getMonth()>|| new Date(arrivo).getMonth()<4) ? 35 50;
        var 
    totale:Number prezzo*notti;
        
    trace("Il prezzo totale per il periodo scelto ("+notti+" notti) è di "+totale+",00 Euro.");

    MA...quando si tratta di calcolare le date a cavallo tra due mesi (tipo dal 27 febbraio al 3 marzo..) sballa...

    :\

    come fare?

    (per il resto funziona alla grande eh)

  5. #5
    ok..penso di aver capito il problema. i mesi nelle proprietà della data vengono calcolati a partire da 00 (gennaio) e arrivano a 11 (dicembre).

    come faccio a comunicargli che quello che deve leggere per effettuare il calcolo è mesi + 01 ?



    inoltre: come faccio a veicolare i valori "accettati" all interno dell'input box e quelli che invece non possono essere inseriti (tipo le lettere) ?

  6. #6
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    Ok, allora, hai già visto come fare per assegnare le parti della data alle variabili di partenza e arrivo, ma probabilmente per evitare errori è necessario passare quegli input per un "Number()" in modo da essere certi che lo script li interpreti in maniera corretta.
    Riguardo alla questione del numero, che invece di andare da 1 a 12 va da 0 a 11, non è comunque un problema, nel senso che la differenza delle due date non avrà ripercussioni su questo, ma in ogni caso per essere certi che gli stiamo passando il mese corretto, possiamo tranquillamente sottrare un 1 alla data inserita in input dall'utente, così se l'utente intende inserire uno 03 che dovrebbe equivalere a marzo, noi gli passeremo uno 03-1 ossia 02, che per lo script equivale a marzo.

    codice:
    var arrivo:Number = Date.UTC(Number(_root.y_arrivo.text), Number(_root.m_arrivo.text)-1, Number(_root.d_arrivo.text));
    Per dare la possibilità all'utente di scrivere solo numeri dentro le caselle, si usa la proprietà restrict che, combinata con la proprietà maxChars ti da la possibilità di indicare l'inserimento di solo un numero prestabilito di caratteri, ad esempio 2 per il mese e il giorno e quattro per l'anno.
    Per impostare solo la scrittura dei numeri con restrict si fa: nome_istanza_textfield.restrict="0-9".

    Per completezza dovresti anche inserire il controllo sui numeri che ottieni dai campi per verificare che il campo mese non vada oltre il 12 e il campo giorno non vada oltre il 31, inoltre dovresti verificare che la differenza tra partenza e arrivo non sia negativa, perchè in quel caso vorrebbe dire che è stata selezionata una data di partenza inferiore a quella di arrivo.

    [edit] Oh, volendo in flash 8 c'è anche il componente "DataChoser" che potrebbe "allievare" il problema di far scrivere la data all'utente, però chiaramente cambia il peso del filmato e il modo di agire nello script.

  7. #7
    grazie mille per le spiegazioni


    potresti spiegarmi per piacere questo costrutto:
    Codice PHP:
    var prezzo:Number = (new Date(arrivo).getMonth() > || new Date(arrivo).getMonth() < 4) ? 35 50
    in quanto ho piu periodi di alta e piu periodi di bassa stagione da inserire dunque dovrei creare diverse opzioni...


    grazie ^^

  8. #8
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    Allora per quello ti consiglio di usare uno switch...case.
    Il costrutto che hai indicato è un if...else compresso e si scrive in questo modo:

    codice:
    var nome_variabile = condizione ? valore_se_condizione_vera : valore_se_condizione_falsa;
    Equivale a scrivere:

    codice:
    if (condizione) {
        var nome_variabile = valore_se_condizione_vera;
    } else {
        var nome_variabile = valore_se_condizione_falsa;
    }

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.