Back to top

Autore Topic: chronoforms javascript calcolo date  (Letto 2698 volte)

Offline charlijuly

  • Nuovo arrivato
  • *
  • Post: 3
    • Mostra profilo
chronoforms javascript calcolo date
« il: 03 Feb 2014, 14:02:39 »
aiutoooo!!!!
salve a tutti. sto cercando di creare un formulario per un noleggio dove devono inserire la data d'inizio e la data finale e devo calcolare la differenza di giorni (giorni di noleggio). ho adattato un script trovato sulla rete il quale funziona a meta cioè lo script funziona, pero solo una volta vi spiego quello che ho fatto
ho creato nella preview 4 campi


datetime picker1
text field= data inizio
name field= data_inizio
field class =  d1


datetime picker2
text field= data fine
name field= data_fine
field class =  d2


text field= Giorni (con questo campo recupero la differenza di giorni delle due date)
name field= giorni
field class =  giorni


submit buton
button type = regular button
text = calcola giorni


nella tab events  ho inserito un LOAD JS col seguente codice:
Codice: [Seleziona]
jQuery.noConflict();
function controllo_data(stringa){
var espressione = /^[0-9]{2}\/[0-9]{2}\/[0-9]{4}$/;
if (!espressione.test(stringa))
{
    return false;
}else{
anno = parseInt(stringa.substr(6),10);
mese = parseInt(stringa.substr(3, 2),10);
giorno = parseInt(stringa.substr(0, 2),10);

var data=new Date(anno, mese-1, giorno);
if(data.getFullYear()==anno && data.getMonth()+1==mese && data.getDate()==giorno){
return true;
}else{
return false;
}
}
}


function confronta_data(data1, data2){
data1str = data1.substr(6)+data1.substr(3, 2)+data1.substr(0, 2);
data2str = data2.substr(6)+data2.substr(3, 2)+data2.substr(0, 2);
if (data2str-data1str<0) {
return false;
}else{
return true;
}
}


function giorni_differenza(form){
var data1 = form.elements['data_inizio'].value;
var data2 = form.elements['data_fine'].value;
if(!controllo_data(data1) || !controllo_data(data2)){
alert('Inserire le date nel formato gg/mm/aaaa');
return -1;
}


if(!confronta_data(data1,data2)){
alert('La data di inizio deve essere precedente quella di fine');
return -1;
}


anno1 = parseInt(data1.substr(6),10);
mese1 = parseInt(data1.substr(3, 2),10);
giorno1 = parseInt(data1.substr(0, 2),10);
     
anno2 = parseInt(data2.substr(6),10);
mese2 = parseInt(data2.substr(3, 2),10);
giorno2 = parseInt(data2.substr(0, 2),10);


    var dataok1=new Date(anno1, mese1-1, giorno1);
var dataok2=new Date(anno2, mese2-1, giorno2);

differenza = dataok2-dataok1;   
giorni_differenza = new String(differenza/86400000);
       

form.elements['giorni'].value = giorni_differenza;
return giorni_differenza;
}

poi due custom datepicker collegati respettivamente ai datetime picker1 data inizio e datetime picker2 data fine. e per finire il show html


salvo ed esco per poi andare sul code del formulario per inserire gli eventi javascript nei tag. questo e il codice generato io solo aggiungo Onclick="giorni_differenza(this.form);" per eseguire il javascript del onload js


Codice: [Seleziona]
<div class="ccms_form_element cfdiv_datetime" id="data_inizio1_container_div" style=""><label>Data inizio</label><input maxlength="150" size="16" class="d1 cf_date_picker" title="" type="text" value="" name="data_inizio" />
<div class="clear"><><div id="error-message-data_inizio"><><><div class="ccms_form_element cfdiv_datetime" id="data_fine1_container_div" style=""><label>Data Fine</label><input maxlength="150" size="16" class="d2 cf_date_picker" title="" type="text" value="" name="data_fine" />
<div class="clear"><><div id="error-message-data_fine"><><><div class="ccms_form_element cfdiv_text" id="giorni1_container_div" style=""><label>Giorni</label><input maxlength="150" size="30" class="" title="" type="text" value="" name="giorni" />
<div class="clear"><><div id="error-message-giorni"><><><div class="ccms_form_element cfdiv_submit" id="id1_container_div" style="text-align:left"><input name="" class="" value="Calcola Giorni" type="button" Onclick="giorni_differenza(this.form);" />
<div class="clear"><><div id="error-message-"><><><div class="ccms_form_element cfdiv_empty" id="empty_container_div" style=""><div class="clear"><><div id="error-message-empty">


allora vi elenco i problemmi:
1.-il codice javascript viene eseguito solo una volta.
2.-qualsiasi modifica che faccio sul preview mi cancella il Onclick="giorni_differenza(this.form);" e tutti possibili altri richiammi.

domando:che un altro modo per fare la stessa operazione senza dover creare il bottone calcola giorni? visto che ho provato a inserire il evento onchange su tutte due i campi datetime picker1 e datetime picker2 pero vano in conflitto col javascript del custom datapicker.
aiutatemi per piacere sono gia due giorni che sono fermo a questo punto se volette vi allego anche il form.


grazie mille.

[allegato eliminato automaticamente dopo un anno]
« Ultima modifica: 04 Feb 2014, 10:07:27 da charlijuly »

Offline charlijuly

  • Nuovo arrivato
  • *
  • Post: 3
    • Mostra profilo
Re:chronoforms javascript calcolo date
« Risposta #1 il: 03 Feb 2014, 14:04:29 »
come avrete capito sono nuovo nel forum ancora non so neanche scrivere qui!!

Offline tomtomeight

  • Global Moderator
  • Fuori controllo
  • ********
  • Post: 32046
  • Sesso: Maschio
  • Gli automatismi aiutano ma non insegnano nulla.
    • Mostra profilo
Re:chronoforms javascript calcolo date
« Risposta #2 il: 03 Feb 2014, 23:52:08 »
Il codice va messo nel tag #, puoi editare perché ora non si capisce nulla.

Offline charlijuly

  • Nuovo arrivato
  • *
  • Post: 3
    • Mostra profilo
Re:chronoforms javascript calcolo date
« Risposta #3 il: 04 Feb 2014, 09:48:23 »
buon giorno a tutti
aggiungo  più informazione al mio problema ho cambiato lo script nel load js per evitare la cancelazione del html del form per questo:
Codice: [Seleziona]

jQuery.noConflict();
window.addEvent('domready', function() {
    $('calcolo_giorni').addEvent('click', function() {
    var one_day = 1000 * 60 * 60 * 24;
    var date1_ms = $('data_inizio').value;
    var date2_ms = $('data_fine').value;
    var difference_ms = Math.abs(date1_ms – date2_ms);
    $('giorni').value = Math.round(difference_ms/one_day); 
     });
});



adesso pero i datapicker non funzionano e il bottone calcola giorni non risponde al evento click.
il formato:


Codice: [Seleziona]
window.addEvent('domready', function() {
    $('id_campo').addEvent('click', function() {
    fa_qualcosa
     });
});


e corretto visto che ho fatto dei form per testarlo  (a+b  evento_click = c) e funzionava mi sa che ci sono dei conflitti fra il load js e il datapicker collegato al custom datepicker ho anche provato a collegare il datapicker col custom mootool datapicker pero il risultato e lo steso. un altro dato se cancello il loas js i datapicker nel front end tornano a funzionare. speriamo che qualcuno mi dia una mano visto che sono al inizio del progetto e sono già scoraggiato.


grazie.


 



Web Design Bolzano Kreatif