2013-03-18 7 views
13

Ich habe datetime-local HTML-Steuerelement auf meinem Formular und ich muss Datum und Uhrzeit dynamisch über JS oder jQuery festlegen. Wie kann ich es tun?Wie setze ich Datetime auf Datetime-Local über jQuery

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

Ich versuchte

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

aber nichts funktionierte.

Vielen Dank im Voraus.

Antwort

13

den Trick Dies würde tun

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

Sie benötigen zwei Ziffern für den Monat verwenden, um Ihre Probe Arbeit zu machen.

+0

Vielen Dank. Das hat funktioniert. –

+0

Danke, aber das funktioniert nicht in Firefox – shiva

9

Wenn Sie das aktuelle Datum einstellen möchten, dann können Sie dies versuchen:

__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()); 
}); 

Hinweis: Sie können ersetzen $ ('input [type = datetime-local]') mit Id oder Name oder Class des datetime-lokalen Feldes.

BEARBEITEN: d.getMonth() gibt einen Wert zwischen 0-11 zurück, so dass zur Eingabe des richtigen Monats 1 zum Ergebnis hinzugefügt werden muss.

+0

Es funktioniert nicht, weil alle Methoden von Javascript-Datum einen Wert ohne die führende Null zurückgibt. http://stackoverflow.com/a/3605248/792624 – jan267

+0

bearbeitet. Versuchen Sie es und lassen Sie mich wissen :) –

+1

** Note ** 'new Date(). ToJSON(). Slice (0,19)' und 'new Date(). ToISOString(). Slice (0,19)' beide zurück UTC-Zeit, nicht __ lokale Zeit__. –

5

Ich schrieb eine jQuery method that sets the current UTC time. Es ist nützlich für die Initialisierung datetime und datetime-local Eingabefelder.

So würden Sie es verwenden, um ein Feld zu initialisieren.

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

Oder ein Argument von true nur gesetzt Felder ohne Wert zu übergeben.

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

Danke, dass deine jQuery-Erweiterung den Trick gemacht hat ! https://gist.github.com/ryanburnette/8803238 – d1jhoni1b

+0

Gut zu hören! Das erinnert mich daran, dass ich dieses Snippet aufräumen muss. –

7

Was ist los?

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

0

Diese Komponente wird vermasselt, weil es noch nicht richtig angegeben ist. Implementierungen sind wahrscheinlich auch skurril.

Der richtige Weg, um es zu tun sollte sein, ein Date-Objekt zu übergeben, mit JS und DOM würde es keinen Sinn, dies nicht zu haben. Dinge mit der String-Manipulation zu tun, wird Zalgo aufrufen. Früher oder später wird es mit dem Gebietsschema oder der Zeitzone brechen.

ich ausgesehen haben für so etwas und in Chrome 46 gefunden:

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

Wenn Sie nicht über die zweite und Millisekunden entfernen sie im Eingabefeld angezeigt.

Es gibt eine valueAsDate Eigenschaft als gut, aber geheimnisvoll:

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

So haben sie nicht fertig es noch oder wählen Sie für diese Eigenschaft einen schlechten Namen Umsetzung (es zeigt als null, selbst wenn etwas gesetzt though) .

Verwandte Themen