2013-03-18 15 views
13

Posiadam formant html datetime-local w moim formularzu i muszę dynamicznie ustawiać na nim datę i czas za pomocą JS lub jQuery. Jak mogę to zrobić?Jak ustawić datetime na datetime-local przez jQuery

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

Próbowałem

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

ale nic nie działało.

Z góry dziękuję.

Odpowiedz

13

będzie to rade

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

Musisz użyć 2 cyfry miesiąca, aby swoją pracę próbki.

+0

Wielkie dzięki. To się udało. –

+0

Dzięki, ale to nie działa w firefox – shiva

9

Jeśli chcesz ustawić aktualną datę, to można spróbować to:

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

Uwaga: Można zastąpić $ ('input [type = datetime-local]') z Id lub Name lub Class pola datetime-local.

EDYCJA: d.getMonth() zwraca wartość między 0-11, więc aby wprowadzić prawidłowy miesiąc 1, należy dodać do wyniku.

+0

To nie działa, ponieważ wszystkie metody daty javascript zwracają wartość bez wiodącego zera. http://stackoverflow.com/a/3605248/792624 – jan267

+0

Edytowane. Spróbuj i daj mi znać :) –

+1

** Uwaga ** 'new Date(). ToJSON(). Slice (0,19)' i 'new Date(). ToISOString(). Slice (0,19)' oba zwraca Czas UTC, a nie __ czas lokalny__. –

5

Napisałem jQuery method that sets the current UTC time. Jest to przydatne do inicjowania zmiennych wejściowych datetime i datetime-local.

Oto jak użyć go do zainicjowania pola.

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

Albo przechodzą argument true tylko do określonych polach bez wartości.

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

dzięki twojemu rozszerzeniu jQuery zrobiłeś trik ! https://gist.github.com/ryanburnette/8803238 – d1jhoni1b

+0

Świetne do słuchania! To przypomina mi, że muszę wyczyścić ten fragment. –

7

Co z?

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

0

Składnik ten jest pomieszane, ponieważ nie jest jeszcze określona prawidłowo. Wdrożenia również mogą być dziwaczne.

Właściwym sposobem na zrobienie tego powinno być przekazanie obiektu daty, przy JS i DOM nie ma sensu, aby go nie mieć. Robienie rzeczy z manipulacją strunami będzie wywoływać Zalgo. Wcześniej czy później zerwie się z lokalem lub strefą czasową.

Szukałem czegoś takiego w Chrome 46 znaleziono:

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

Jeśli nie usunąć sekund i milisekund pokażą w polu wejściowym.

Istnieje właściwość valueAsDate jak dobrze, ale tajemniczo:

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

więc nie zostały one jeszcze zakończone wdrożenie go lub wybrać złą nazwę dla tej nieruchomości (to pokazuje, jak wartość null, nawet gdy coś jest ustawione chociaż) .

Powiązane problemy