从用户输入的日期复制日期对象

时间:2016-09-01 16:13:05

标签: javascript date

我正在尝试整理一个主要是自动化的表单。我得到当前日期很好,但是我在收集用户输入日期的信息时遇到问题,将其放在表格的另一部分以及+ 1年。 I.E. D.O.B = 08/06/2016更远的表格到期时间08/06/2017。我可以自动输入当前日期,但是当我尝试从用户输入日期时,没有任何内容填写较低的日期。我尝试使用document.getElementById('dob')

获取日期
function datePone()
{
    var date = new Date();

    var day = date.getDate(document.getElementById('dob'))
    var month = date.getMonth(document.getElementById('dob')) + 1;
    var year = date.getFullYear(document.getElementById('dob')) + 1;

    if (month < 10) month = "0" + month;
    if (day < 10) day = "0" + day;

    var oneYear = year + "-" + month + "-" + day;       
    document.getElementById("dateOneYear").value = oneYear;

}

我已经尝试过使用set date或者使用document.getElementById('dob')创建一个新的var,但到目前为止我没有尝试过。

2 个答案:

答案 0 :(得分:0)

由于“dob”是输入字段,要获取输入的数据需要使用value属性,请尝试

document.getElementById('dob').value

我还建议使用momentjs库来操作日期。

答案 1 :(得分:0)

你在哪里:

var day = date.getDate(document.getElementById('dob'))
getDate 方法不接受任何参数,因此忽略它们,以上等同于:

var day = date.getDate()

您没有指定您对字符串使用的格式,&#34; 08/06 / 2016&#34;很暧昧。它是代表6月8日还是8月6日?

您不应使用Date构造函数或Date.parse来解析日期字符串,编写自己的小函数或使用库。此外,在2016年2月29日之前添加一年将于2017年3月1日结束,因此您需要应用规则接受或更改为2017年2月28日。

无论如何,假设输入的格式为dd / mm / yyyy,并且您希望输出日期格式为yyyy-mm-dd,则可以使用库或小函数,如下所示:

&#13;
&#13;
// Parse string in d/m/y format
// If invalid, return invalid Date
function parseDMY(s){
  var b = s.split(/\D/);
  var d = new Date(b[2], --b[1], b[0]);
  return d && d.getMonth() == b[1]? d : new Date(NaN);
}

// Return date string in yyyy-mm-dd format
function toISODate(d) {
  return d.getFullYear() + '-' +
    ('0' + (d.getMonth()+1)).slice(-2) + '-' +
    ('0' + d.getDate()).slice(-2);
}

// Parse string to Date
var d = parseDMY('06/08/2016');
// Add one year
d.setFullYear(d.getFullYear() + 1);

console.log(toISODate(d));
&#13;
&#13;
&#13;

使用像fecha.js这样的库,你可以使用:

来解析字符串
var d = fecha.parse('06/08/2016','DD/MM/YYYY');

并格式化输出:

fecha.format(d, 'YYYY-MM-DD')