2013-07-17 12 views
6

Sto provando a fare una semplice pagina che richiede una data (tipo di input TEXT), e una volta inserita la data, un altro campo aggiungerà 7 giorni all'input e visualizzare la data (+7 giorni) in un inserimento di testo. La mia conoscenza di jQuery è limitata, quindi potrei avere un piccolo bug ...jQuery aggiungi 7 giorni alla data (testo del tipo di input e output)

<html> 
<head> 
<title>Date Plus 7 Days</title> 
<script type="text/javascript"> 
$(document).ready(function(){ 
    function DateFromString(str){ 
     str = str.split(/\D+/); 
     str = new Date(str[2],str[0]-1,(parseInt(str[1])+7)); 
     return MMDDYYYY(str); 
    } 
    function MMDDYYYY(str) { 
     var ndateArr = str.toString().split(' '); 
     var Months = 'Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec'; 
     return (parseInt(Months.indexOf(ndateArr[1])/4)+1)+'/'+ndateArr[2]+'/'+ndateArr[3]; 
    } 

    function Add7Days() { 
     var date = $('#start_date').val(); 
     var ndate = DateFromString(date); 
     return ndate; 
    } 

    $('#start_date').change(function(){ 
     $('#end_date') = Add7Days(); 
    }) 

}); 

</script> 
</head> 
<body> 

Start Date 
<input type="text" id="start_date" value=''> 
<br> 
End date 
<input type="text" id="end_date" value=''> 

</body> 
</html> 

Cosa ho fatto di sbagliato?

Grazie!

+4

Te ne stai andando in su all'utente di inserire la data nel formato che ci si aspetta. Non dovresti mai fidarti dell'utente. Dal momento che stai già sfruttando jQuery dai un'occhiata al datapicker dell'interfaccia utente jQuery. Questo ti darà un calendario e valori di immissione delle date molto più affidabili. – Brombomb

risposta

10

si è tentato di assegnare un oggetto a $('#end_date'). jQuery si occupa di questo in un modo diverso, modificando il valore della casella di input, facendo leva .val('value-here')

Prova questo:

$('#start_date').change(function(){ 
    $('#end_date').val(Add7Days()); 
}); 

Vedere questo violino: http://jsfiddle.net/zydZ2/

Inoltre, Moment.JS è grande per l'analisi e la manipolazione di date, avrei fortemente consiglia di controllare che fuori: http://momentjs.com/

Spero che questo aiuti!

+0

Il risultato di '$()' non è una funzione; è un oggetto – Ian

+0

@Ian scuse, sei corretto al 100%. Aggiornato per riflettere questo. –

+0

Grazie per l'aiuto! –

7

funzionalmente per aggiungere sette giorni ad una data già esistente può essere raggiunto utilizzando

var today_date = new Date() 
alert(today_date) 
today_date.setDate(today_date.getDate() + 7) 
alert(today_date) 

questo aggiungerà sette giorni di tempo per una data già esistente se il 31 di quello che farà il 7 del mese prossimo

speranza questo aiuto

2

È possibile utilizzare JQuery & JqueryUs datepicker in primo piano per farlo.

$('#start_date').datepicker({ 
     dateFormat: 'mm/dd/yy', 
     minDate: 0, 

    }); 
    $("#end_date").datepicker({ 
     dateFormat: 'mm/dd/yy', 
     minDate: 7, 

    }); 

    var _dt = new Date(); 
    var _dt = _dt.setDate(_dt.getDate());  
    $("#start_date").datepicker("setDate","mm/dd/yy", _dt); 
    $("#end_date").datepicker("setDate", "mm/dd/yy", _dt);  

si può fare riferimento questo http://jsfiddle.net/o9grLdf0/12/

min = 0 per l'ingresso startdate = data odierna e min = 7 significare oggi + 7 giorni per enddate

+0

si prega di dare qualche spiegazione, che come questo codice risolve il problema dell'utente. – Hamad

0
function listDatesBetweenTwoDates(S_dateA, S_dateB) { 
    var O_dateA = moment(S_dateA).add(1, 'd'); 
    var O_dateB = moment(S_dateB).add(1, 'd'); 
    var O_itr = moment.twix(O_dateA, O_dateB).iterate("days"); 
    var A_range = []; 
    while (O_itr.hasNext()) { 
     A_range.push(O_itr.next().toDate()) 
    } 
    return A_range; 
} 
Problemi correlati