2013-03-18 25 views
13

Ho il controllo html datetime-local sul mio modulo e ho bisogno di impostare data e ora su di esso dinamicamente tramite JS o jQuery. Come posso farlo?Come impostare datetime su datetime-local tramite jQuery

<input type="datetime-local" id="publishDate" required/> 

ho cercato

$("#publishDate").val("2013-3-18 13:00"); 
$("#publishDate").val("2013-3-18T13:00"); 
$("#publishDate").val(new Date().toLocalString()); 

ma niente ha funzionato.

Grazie in anticipo.

risposta

13

Ciò farebbe il trucco

$("#publishDate").val("2013-03-18T13:00"); 

È necessario utilizzare 2 cifre per il mese per rendere il vostro lavoro del campione.

+0

Grazie mille. Ha funzionato. –

+0

Grazie, ma questo non funziona in firefox – shiva

9

Se si desidera impostare la data corrente, allora si può provare questo:

__Method 1:__ 

$(document).ready(function(){ 
    $('input[type=datetime-local]').val(new Date().toJSON().slice(0,19)); 
}); 

__Method 2:__ 

function zeroPadded(val) { 
    if (val >= 10) 
    return val; 
    else 
    return '0' + val; 
} 

$(document).ready(function(){ 
    d = new Date(); 
    $('input[type=datetime-local]').val(d.getFullYear()+"-"+zeroPadded(d.getMonth() + 1)+"-"+zeroPadded(d.getDate())+"T"+d.getHours()+":"+d.getMinutes()+":"+d.getSeconds()); 
}); 

Nota: È possibile sostituire $ ('ingresso [type = datetime-locale]') con Id o Name o Class del campo locale datetime.

MODIFICA: d.getMonth() restituisce un valore compreso tra 0-11, quindi per inserire il mese corretto 1 deve essere aggiunto al risultato.

+0

Non funziona perché tutti i metodi della data di javascript restituiscono un valore senza lo zero iniziale. http://stackoverflow.com/a/3605248/792624 – jan267

+0

Modificato. Prova e fammi sapere :) –

+1

** Nota ** 'new Date(). ToJSON(). Slice (0,19)' e 'new Date(). ToISOString(). Slice (0,19)' entrambi restituisce UTC-time, non __local time__. –

5

Ho scritto un jQuery method that sets the current UTC time. È utile per inizializzare i campi di input datetime e datetime-local.

Ecco come utilizzarlo per inizializzare un campo.

$('input[type="datetime"]').setNow(); 

O passare un argomento di true ai campi solo impostare senza valore.

$('input[type="datetime"]').setNow(true); 
+0

grazie l'estensione jQuery ha fatto il trucco ! https://gist.github.com/ryanburnette/8803238 – d1jhoni1b

+0

Ottimo per sentire! Questo mi ricorda che ho bisogno di ripulire quel frammento. –

7

Che dire?

var now=new Date(); 
 
console.log(new Date(now.getTime()-now.getTimezoneOffset()*60000).toISOString().substring(0,19));

0

Questo componente è incasinato perché non è ancora specificato correttamente. È probabile che anche le implementazioni siano bizzarre.

Il modo corretto per farlo dovrebbe essere passare un oggetto data, con JS e DOM non avrebbe senso non averlo. Fare cose con la manipolazione delle stringhe invocherà Zalgo. Prima o poi si romperà con le impostazioni locali o il fuso orario.

ho cercato qualcosa di simile e in Chrome 46 lo giudicano:

$('input[type=datetime-local]').prop('valueAsNumber', Math.floor(new Date()/60000) * 60000); // 60seconds * 1000milliseconds 

Se non si rimuove il secondo e millisecondi mostreranno nel campo di inserimento.

C'è una proprietà valueAsDate pure ma misteriosamente:

Uncaught DOMException: Failed to set the 'valueAsDate' property on 'HTMLInputElement': This input element does not support Date values. 

Quindi non hanno finito di attuazione ancora o scegliere un nome male per quella proprietà (lo dimostra come nulla, anche quando qualcosa è impostato però) .

Problemi correlati