首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用Javascript预先填充日期输入字段

使用Javascript预先填充日期输入字段
EN

Stack Overflow用户
提问于 2013-01-10 03:54:16
回答 6查看 39.5K关注 0票数 25

我试图将日期预先填充到html " date“输入字段中,但它忽略了我试图传递的值:

代码语言:javascript
运行
复制
<html>
...
<input id='date' type='date'>
...
</html>

<script>
...
var myDate = new Date();
$("#date").val(myDate);
...

我还尝试将date对象作为字符串传递

代码语言:javascript
运行
复制
var myDate = new Date().toDateString();
$("#date").val(myDate);

当我打开表单时,日期字段是空白的。如果我去掉了type="date“标记,值就会显示为一个字符串,但是我就不能访问datepicker了。如何在预填入日期输入的同时仍能使用日期选择器?我被难住了。

谢谢。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2013-01-10 05:01:52

它必须设置为ISO格式。

代码语言:javascript
运行
复制
(function () {
    var date = new Date().toISOString().substring(0, 10),
        field = document.querySelector('#date');
    field.value = date;
    console.log(field.value);

})()

http://jsfiddle.net/GZ46K/

票数 54
EN

Stack Overflow用户

发布于 2019-11-15 23:56:37

为什么不使用toISOString()

<input type='date'>字段采用ISO8601格式(reference)的值,但您不应对其值使用Date.prototype.toISOString()函数,因为在输出ISO8601字符串之前,它会将日期/时间读取为国际协调时标准时间( converts/represents :更改时区)(Date.prototype.toISOString():更改时区)。除非你碰巧正在工作或者想要这个时间标准,否则你会引入一个bug,你的日期有时会改变,但并不总是改变。

在不更改时区的情况下从日期对象填充HTML5日期输入

要想在不干扰时区的情况下为<input type='date'>获得正确的输入值,唯一可靠的方法是手动使用date组件getter:

代码语言:javascript
运行
复制
let d = new Date();
let datestring = d.getFullYear().toString() + '-' + (d.getMonth()+1).toString().padStart(2, '0') + '-' + d.getDate().toString().padStart(2, '0');
document.getElementById('date').value = datestring;

/* Or if you want to use jQuery...
$('#date').val(datestring);
*/
代码语言:javascript
运行
复制
<input id='date' type='date'>

从未更改时区的日期对象填充HTML5日期和时间字段

这超出了原始问题的范围,但是对于希望从date对象同时填充Date和time HTML5输入字段的人来说,下面是我想出的方法:

代码语言:javascript
运行
复制
// Returns a 2-member array with date & time strings that can be provided to an
// HTML5 input form field of type date & time respectively. Format will be
// ['2020-12-15', '01:27:36'].
function getHTML5DateTimeStringsFromDate(d) {

  // Date string
  let ds = d.getFullYear().toString() + '-' + (d.getMonth()+1).toString().padStart(2, '0') + '-' + d.getDate().toString().padStart(2, '0');

  // Time string
  let ts = d.getHours().toString().padStart(2, '0') + ':' + d.getMinutes().toString().padStart(2, '0') + ':' + d.getSeconds().toString().padStart(2, '0');

  // Return them in array
  return [ds, ts];
}

// Date object
let d = new Date();

// Get HTML5-ready value strings
let dstrings = getHTML5DateTimeStringsFromDate(d);

// Populate date & time field values
document.getElementById('date').value = dstrings[0]
document.getElementById('time').value = dstrings[1]

/* Or if you want to use jQuery...
$('#date').val(dstrings[0]);
$('#time').val(dstrings[1]);
*/
代码语言:javascript
运行
复制
<input type='date' id='date'>
<input type='time' id='time' step="1">

票数 8
EN

Stack Overflow用户

发布于 2013-01-10 05:16:21

谢谢你j08691。这个链接就是答案。

对于像我这样苦苦挣扎的人来说,当他们说输入是"yyyy-mm-dd“时,它的意思是!

您必须有4位数字的年份。必须有破折号,并且没有空格。您必须使用2位数字表示日和月。

在我的示例中,1月份的myDate.getMonth只返回"1“(实际上它返回"0”,因为出于某种原因,javascript从0到11计算月份)。为了获得正确的结果,我必须执行以下操作:

代码语言:javascript
运行
复制
var myDate, day, month, year, date;
myDate = new Date();
day = myDate.getDate();
if (day <10)
  day = "0" + day;
month = myDate.getMonth() + 1;
if (month < 10)
  month = "0" + month;
year = myDate.getYear();
date = year + "-" + month + "-" + day;
$("#date").val(date);

我希望这能帮助其他人,而不是像我在10月或本月10日之前测试的那样浪费时间!LOL

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14245339

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档