Как установить datetime в datetime-local через jQuery

У меня есть 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());

но ничего не получилось.

Спасибо заранее.

Ответ 1

Это сделало бы трюк

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

Вам нужно использовать 2 цифры за месяц, чтобы заставить ваш образец работать.

Ответ 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, поэтому для ввода соответствующего месяца необходимо добавить результат.

Ответ 3

Как насчет?

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

Ответ 4

Я написал метод jQuery, который устанавливает текущее время UTC. Это полезно для инициализации полей ввода datetime и datetime-local.

Здесь вы можете использовать его для инициализации поля.

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

Или передать аргумент true только для установки полей без значения.

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

Ответ 5

Этот компонент испорчен, потому что он еще не определен правильно. Реализации, вероятно, также будут причудливыми.

Правильный способ сделать это должен состоять в том, чтобы передать объект даты, с 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, даже если что-то установлено).