28

我的表单上有 datetime-local html 控件,我需要通过 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());

但没有任何效果。

4

8 回答 8

30

这可以解决问题

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

您需要为月份使用 2 位数字才能使您的示例正常工作。

于 2013-03-18T19:07:43.743 回答
15

如果你想设置当前日期,那么你可以试试这个:

__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]') 替换Idor 或NameorClass

编辑: d.getMonth() 返回一个介于 0-11 之间的值,因此要输入正确的月份 1 需要添加到结果中。

于 2013-11-12T07:00:47.940 回答
10

关于什么?

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

于 2014-09-23T11:57:43.363 回答
5

我编写了一个设置当前 UTC 时间的 jQuery 方法。它对于初始化datetimedatetime-local输入字段很有用。

这是您将如何使用它来初始化字段的方法。

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

或者传递一个参数true来只设置没有值的字段。

$('input[type="datetime"]').setNow(true);
于 2014-02-04T17:05:56.373 回答
3

这是使用 momentjs 格式化日期的解决方案。
这将获取当前日期和时间

moment().format('YYYY-MM-DDThh:mm:ss.SSS')
于 2018-05-07T03:02:25.360 回答
2

这是一种更简单的方法。

const now = (new Date().toLocaleString("sv-SE") + '').replace(' ','T');
console.log(now);

于 2020-09-06T08:52:18.257 回答
0

这个组件搞砸了,因为它还没有正确指定。实现也可能很古怪。

正确的做法应该是传递一个日期对象,对于 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)。

于 2016-10-31T21:23:28.437 回答
0

对于那些在字符串格式中带有“T”字符的日期的人, 用下面的代码
将 10 个字符(空格)替换为 T :

function setCharAt(str,index,chr) {
    if(index > str.length-1) return str;
    return str.substring(0,index) + chr + str.substring(index+1);
}
var variable=setCharAt("2022-02-26 16:32",10,"T");
$("#publishDate").val(variable);

但请记住,格式必须为“YYYY-MM-DDThh:mm:ss”
,OP 错误地提供了日期“2013-3-18T13:00”
,而月份应该是“03”

于 2022-02-26T11:05:20.207 回答