Ответ 1
Это сделало бы трюк
$("#publishDate").val("2013-03-18T13:00");
Вам нужно использовать 2 цифры за месяц, чтобы заставить ваш образец работать.
У меня есть datetime-local html control в моей форме, и мне нужно динамически устанавливать дату и время с помощью JS или jQuery. Как я могу это сделать?
<input type="datetime-local" id="publishDate" required/>
Я пробовал
$("#publishDate").val("2013-3-18 13:00");
$("#publishDate").val("2013-3-18T13:00");
$("#publishDate").val(new Date().toLocalString());
но ничего не получилось.
Спасибо заранее.
Это сделало бы трюк
$("#publishDate").val("2013-03-18T13:00");
Вам нужно использовать 2 цифры за месяц, чтобы заставить ваш образец работать.
Если вы хотите установить текущую дату, вы можете попробовать следующее:
__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());
});
Примечание. Вы можете заменить $('input [type = datetime-local]') на Id
или Name
или Class
локального поля datetime.
EDIT: d.getMonth() возвращает значение между 0-11, поэтому для ввода соответствующего месяца необходимо добавить результат.
Как насчет?
var now=new Date();
console.log(new Date(now.getTime()-now.getTimezoneOffset()*60000).toISOString().substring(0,19));
Я написал метод jQuery, который устанавливает текущее время UTC. Это полезно для инициализации полей ввода datetime
и datetime-local
.
Здесь вы можете использовать его для инициализации поля.
$('input[type="datetime"]').setNow();
Или передать аргумент true
только для установки полей без значения.
$('input[type="datetime"]').setNow(true);
Этот компонент испорчен, потому что он еще не определен правильно. Реализации, вероятно, также будут причудливыми.
Правильный способ сделать это должен состоять в том, чтобы передать объект даты, с JS и DOM было бы бессмысленно не иметь этого. Выполнение операций с помощью строковых манипуляций вызовет Zalgo. Рано или поздно он сломается с локалью или часовым поясом.
Я искал что-то вроде этого и в Chrome 46 нашел:
$('input[type=datetime-local]').prop('valueAsNumber', Math.floor(new Date() / 60000) * 60000); // 60seconds * 1000milliseconds
Если вы не удалите вторую и миллисекунду, они будут отображаться в поле ввода.
Существует свойство valueAsDate, но таинственно:
Uncaught DOMException: Failed to set the 'valueAsDate' property on 'HTMLInputElement': This input element does not support Date values.
Таким образом, они еще не завершили его реализацию или выбрали неправильное имя для этого свойства (оно отображается как null, даже если что-то установлено).