Javascript 手动输入D.O.B时计算年龄

Javascript 手动输入D.O.B时计算年龄,javascript,jquery,ajax,Javascript,Jquery,Ajax,我使用Ajax日历查找年龄,我在一个文本框上使用日历,并在下一个文本框上显示年龄。到目前为止一切都很好,但现在我有两个问题 第一个问题:-我想禁用年龄文本框,这样用户就不能更改年龄,但当我禁用它时,它不会在数据库中存储任何内容,现在我不知道该怎么办 第二个问题:-可能是用户开始手动输入D.O.B,而不是从日历中选择它,在这种情况下,不会计算任何内容,如何以这样的方式应用功能,以计算仍然使用年限 JavaScript代码如下,现在如何让它在用户在文本框中手动输入D.O.B时工作 <scrip

我使用Ajax日历查找年龄,我在一个文本框上使用日历,并在下一个文本框上显示年龄。到目前为止一切都很好,但现在我有两个问题

第一个问题:-我想禁用年龄文本框,这样用户就不能更改年龄,但当我禁用它时,它不会在数据库中存储任何内容,现在我不知道该怎么办

第二个问题:-可能是用户开始手动输入D.O.B,而不是从日历中选择它,在这种情况下,不会计算任何内容,如何以这样的方式应用功能,以计算仍然使用年限

JavaScript代码如下,现在如何让它在用户在文本框中手动输入D.O.B时工作

<script type="text/javascript">
    function DateSelectionChanged(e) {

        var today = new Date();
        var dob = e.get_selectedDate();
        var months = (today.getMonth() - dob.getMonth() + 
                      (12 * (today.getFullYear() - dob.getFullYear())));
        document.getElementById("txtCONSULTANT_AGE").value= Math.round(months/12);
        document.getElementById("txtCONSULTANT_AGE").readOnly = true;
    }    
</script>
这里,对Ajax日历扩展程序的OnClient DateSelectionChanged调用DateSelectionChanged


感谢是预付款。

这会给你以下年龄:

var age = Math.floor(((new Date()).getTime()-(new Date($('#myAgeTextBox').val())).getTime())/(1000*60*60*24*365));
其中myAgeTextBox是文本框的id,假设用户以正确的格式输入了日期

编辑:使代码更具可读性

var currentDate = (new Date()).getTime();
var dobDate = (new Date($('input').val())).getTime();
var annualMilliSeconds = 1000*60*60*24*365;
var age = Math.floor((currentDate-dobDate)/(annualMilliSeconds));

要使用HTML禁用年龄框,请使用

<input type="text" name="age" readonly="readonly" />

document.getElementById'age'.disabled=true


注意:仅当您想将其从提交中删除时才应使用Disabled(禁用)

我已经解决了我的问题,它非常简单

创建另一个函数,在该函数中,只需从文本框中获取值并传入变量dob,因此如下所示:- 早些时候:-

dob = e.get_selectedDate();
现在

其他一切都将保持不变。所以最后的代码是

        function findage() {
          var PresentDay = new Date();
          var dob = (new Date(document.getElementById("txtDATE_OF_BIRTH").value));
          var months = (PresentDay.getMonth() - dateOfBirth.getMonth() + 
                 (12 * (PresentDay.getFullYear() - dateOfBirth.getFullYear())));
         document.getElementById("txtCONSULTANT_AGE").value=Math.round(months/12);
        } 

你能展示你的代码吗..这将有助于理解更多。是否使用C/java?发送给日期构造函数的输入的val?字符串值似乎不太可能匹配ISO8601日期字符串格式,你不这样认为吗?我说过我是这样假设的。OP可能会放置某种悬停文本“日期格式应为MM/DD/YYYY”。在提交之前,甚至可能会进行正则表达式检查。使用日期小部件可能更好,ISO8601不是mm/dd/yyyy。请看,将用户输入的值传递到日期构造函数中不是一个好主意。最好使用正则表达式解析用户输入的字符串,并以正确的格式手动构造字符串。ISO8601表示YYYY-MM-DDTHH:MM:ss.sssZ,但日期构造函数也可以读取MM/DD/YYYY。我想OP已经在使用某种日期控件了
dob = e.get_selectedDate();
dob = (new Date(document.getElementById("txtDATE_OF_BIRTH").value));
        function findage() {
          var PresentDay = new Date();
          var dob = (new Date(document.getElementById("txtDATE_OF_BIRTH").value));
          var months = (PresentDay.getMonth() - dateOfBirth.getMonth() + 
                 (12 * (PresentDay.getFullYear() - dateOfBirth.getFullYear())));
         document.getElementById("txtCONSULTANT_AGE").value=Math.round(months/12);
        }