2017-06-20 93 views
0

我有一个简单的表单来输入配偶详细信息。表格如下:Jquery - 自动填充插入值的输入库

HTML

<div class="form-group"> 
    <input type="text" name="name" id="name" placeholder="Name"> 
</div> 

<div class="form-group"> 
    <input type="text" name="ic_no" id="ic_no" placeholder="IC No."> 
</div> 

<div class="form-group"> 
    <input type="date" name="dob" id="dob" placeholder="DOB" > 
</div> 

的ic_no会像870505113223。我能够得到出生的第一个6位数字,即我们的YYYY-mm-dd;

jQuery的

$("#ic_no").blur(function(){  
    var ic_no = $("#ic_no").val(); 
    var dob = ic_no.substr(0, 6); 
    console.log(dob); //will output 870505 
    $("#dob").val(dob); //this will give an error 
}); 

我的问题是,我怎么想获得6个位数自动补DOB输入?

从上面的代码,我会得到这个错误,

The specified value "870505" does not conform to the required format, "yyyy-MM-dd". 
+1

转换和格式'870505'到所述格式 – Satpal

+0

*的ic_no会像870505113223.我能够拿到第6位是我们YYYY -mm-dd出生; *,**没有第一个6位数字不是你认为他们是**,整个数字是日期的毫秒值,你需要将它转换回'Date'对象并且提取dd,mm和yyyy值。 –

+1

而不是设置'870505',你需要像'1987-05-05'这样设置'var dob =“19”+ ic_no.substr(0,2)+“ - ”+ ic_no.substr(2,2) +' - '+ ic_no.substr(4,2)' –

回答

2

假设870505日期1987-05-05匹配。

你可以这样做:

var y = "19" + dob.substring(0, 2); 
var m = dob.substring(2, 4); 
var d = dob.substring(4, 6); 
var f = y + "-" + m + "-" + d; 
$("#dob").val(f); 
+0

感谢您的帮助。还有,如何检查它是2000年还是90年代? – Amran

+2

你可以这样做:'var y = parseInt(dob.substring(0,2))> 17? “19”+ dob.substring(0,2):“20”+ dob.substring(0,2)',它假定尽可能最高的年份是'2017',但这会忽略像'1910'这样的年份,I认为你应该改变你的整个逻辑以包括整整一年。 –

+0

@chsdk你是否有参考或链接,如果我想包括全年? – Amran

0

在你的情况,你不能只用6位数字的转换。你必须让你的ic_no的所有时间戳然后将其转换:

$("#ic_no").blur(function(){ 
    var ic_no = $("#ic_no").val(); 
    d = new Date(ic_no), 
    month = d.getMonth()+1, //it is begin with 0 so you must add 1 
    day = d.getDate(), 
    year = d.getFullYear(); 

    month = CheckZero(month); 
    day = CheckZero(day); 

    //check if you can add 0 or not 
    function CheckZero(number) { 
     if (number < 10) { 
      number = "0" + number; 
     } 
     return number; 
    } 

    var finished_date = year+'-'+month+'-'+day; 
    $("#dob").val(finished_date); 
}); 
+0

感谢您的帮助,但我认为ic_no会给出无效日期。 – Amran

+0

它是你的ic_no值是'870505113223'然后将'd = new Date(ic_no),'替换为'd = new Date(870505113223)'。 –