2017-06-19 52 views
0

我试图从html输入到javascript,从它减去3年的日期,然后将新日期放回到另一个html日期输入字段。如何操作从javascript输入javascript的日期

我得到了与当前日期一起使用的减法,但是当我从html输入中获取日期时,我无法让它正常工作。

下面我的代码工作:

<input id="InputDate" data-role="datepicker"/> 
<input id="OutputDate" data-role="datepicker"/> 

<script type="text/javascript"> 
    var dt = new Date(); // this line I want to replace with the next 2 lines! 
    //var inDate= document.getElementById("InputDate").value; 
    //var dt = new Date(inDate); 
    dt.setFullYear(dt.getFullYear() - 3); 
    var datestring = ("0" + dt.getDate()).slice(-2) + "." + ("0"+(dt.getMonth()+1)).slice(-2) + "." + dt.getFullYear(); 
    document.getElementById("OutputDate").value = datestring; 

当我取回从输入字段我得到“aN.aN.NaN”回输出域的日期。 我试过document.getElementById(“InputDate”).valueAsDate,但是这也不起作用。 当我在dt的实例化后发出警报(dt)时,我得到'无效日期'。

任何建议如何正确获取DateObject中的提取日期?

问候,马努

+0

什么有效/安全的日期格式让日期构造函数解析,你可以研究。如果您的输入日期格式不同,那么您必须先修改它。 – CBroe

+0

什么日期格式InputDate字段有? –

回答

1
var inputValues = document.getElementById("InputDate").value.split("."); 
var dt = new Date(inputValues[2], inputValues[1] - 1, inputValues[0]); 

如果你喜欢的东西作为22.12.1985值InputDate

1

使用日期格式

var date = "2017-06-19";//yyyy-mm-dd or mm-dd-yyyy 
var dt = new Date(date); 
console.log(dt); 
//output Mon Jun 19 2017 00:00:00 GMT+0545 (Nepal Standard Time) 
// if you want to set the date to new output text box 
var newDate = dt.getFullYear() + "-" + (dt.getMonth() + 1) + "-" + dt.getDate(); 
console.log(newDate); 
1

首先验证你的,的document.getElementById ( “InputDate”)。值;是 返回正确的日期

var inDate= document.getElementById("InputDate").value; 
    var dt = new Date(Date.parse(inDate)); //use parse input to corret date format 
    dt.setFullYear(dt.getFullYear() - 3); 
+0

Date.parse的概念很好,但不幸的是它不是推荐的做法;请参阅https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/parse – slevy1

2

只是需要正确的格式传递给date()函数:

//var dt = new Date(); // this line I want to replace with the next 2 lines! 
 
    var inDate= document.getElementById("InputDate").value; 
 
    inDate = inDate.split("."); 
 
    var dt = new Date(inDate[2],inDate[1],inDate[0]); 
 
    //alert(dt); 
 
    dt.setFullYear(dt.getFullYear() - 3); 
 
    
 
    var datestring = ("0" + dt.getDate()).slice(-2) + "." + ("0"+(dt.getMonth()+1)).slice(-2) + "." +   dt.getFullYear(); 
 
    document.getElementById("OutputDate").value = datestring;
<input id="InputDate" data-role="datepicker" value="19.05.2015"/> 
 
<input id="OutputDate" data-role="datepicker"/>

1

var d = document; 
 
d.g = d.getElementById; 
 

 
var inDate = d.g("InputDate"); 
 
var outDate = d.g("OutputDate"); 
 
var datestring = ""; 
 
var mo = ""; 
 
var dt = null; 
 

 

 
inDate.onchange = function() { 
 
    dt = new Date(inDate.value); 
 
    dt.setFullYear(dt.getFullYear() - 3); 
 
    datestring = ("0" + (dt.getMonth() + 1)).slice(-2) + "." + ("0" + dt.getDate()).slice(-2) + "." + dt.getFullYear(); 
 
    outDate.value = datestring; 
 

 
};
<input id="InputDate" data-role="datepicker" value="mm.dd.yyyy"><input id="OutputDate" data-role="datepicker" />

此修订使用onchange事件属性,该属性避免显示“NaN”消息以响应用作用户提示的默认值“mm.dd.yyyy”。它还使用一些捷径来减少代码的冗长度。注意:虽然官方示例优雅地分割为“。”获取日期值,尽管额外的代码,花时间使用Date方法来提取月份,日期和年份具有优势。拆分“。”只要输入数据包含划分月份,日期和年份值的时间段就可以工作。但用户可以使用“/”或“ - ”,然后该分割代码将不会产生正确的结果,除非有代码检查该期间。