要计算给定年龄的出生日期

时间:2018-08-20 15:14:32

标签: javascript html

我正在尝试计算给定年龄的出生日期。 我的逻辑是

当我们输入年龄时,请说“ 5”。出生日期将从当前日期起精确算出5年。示例当前日期为20/8/2018。 如果年龄为5岁,则出生日期为2013年8月20日。 所以下面是我的代码:

data1[grep(paste(data2$check_email, collapse = "|"), data1$emails), ]

#   id          emails
# 1  1       A,B,C,D,E
# 2  2     F,G,H,A,C,D
# 3  4 S,V,F,R,D,S,W,A
# 4  5         P,A,L,S
# 5  7       S,D,F,E,Q
# 6  8     Z,A,D,E,F,R
# 7 10     A,V,D,S,C,E
function validatedob() {
  var dob_value = document.getElementById('dob').value;
  var age_value = document.getElementById('age').value;
  var current_date = new Date();
  var birth_date = new Date();
  var birth_year = current_date.getFullYear() - age_value;
  var birth_month = current_date.getMonth();
  var birth_day = current_date.getDate();

  birth_date.setDate(current_date.getFullYear() - age_value);
  birth_date.setMonth(current_date.getMonth());
  birth_date.setFullYear(current_date.getDate());

  document.getElementById('dob').setDate(birth_day);
  document.getElementById('dob').setMonth(birth_month);
  document.getElementById('dob').setFullYear(birth_year);
}

这不起作用。我对html属性不好。 有人能帮我吗?如何做到这一点?

4 个答案:

答案 0 :(得分:2)

这是简单的答案:

> d1 = new Date(2018, 00, 01)
Date 2018-01-01T00:00:00.000Z
> d2 = new Date(d1.getFullYear() - 5, d1.getMonth(), d1.getDate())
Date 2013-01-01T00:00:00.000Z

但是,我建议使用诸如Luxon之类的库。

如果您自己进行日期操作,那绝对是一场噩梦。来自Computerphile的这段视频总结得比我更好:
https://www.youtube.com/watch?v=-5wpm-gesOY

答案 1 :(得分:1)

以下是一些示例代码供您参考

https://codepen.io/ji_in_coding/pen/wEvoMK

<div class="form-inline" id="Age">
   <label for="age">Age</label>
   <input id="age" type="integer" name="age" onchange="validatedob()">          
</div>

  <div class="form-inline" id="birth" >
    <label for="DOB">Date of Birth</label>
    <input id="dob" type="input" name="date_of_birth">                     
</div>

JavaScript

function validatedob()
{
  var age_value = document.getElementById("age").value;
  var today = new Date();
  var calculated_birthday = new Date(
    parseInt(today.getFullYear())+parseInt(age_value), 
    today.getMonth(), 
    today.getDate());
  document.getElementById("dob").value = calculated_birthday.toLocaleDateString("en-US");
}

答案 2 :(得分:1)

您遇到的问题是,您正在尝试setDate并在HTMLElement上使用cie。输入dob需要一个格式为yyyy-MM-dd的字符串。您可以尝试这样的事情:

var $dob = document.getElementById('dob');
var $age = document.getElementById('age');

function validatedob() {
  var age = $age.value;
  var date = new Date();
  date.setFullYear(date.getFullYear() - age);
  $dob.value = formatDate(date);
}

function formatDate(date) {
    var d = new Date(date),
        month = '' + (d.getMonth() + 1),
        day = '' + d.getDate(),
        year = d.getFullYear();

    if (month.length < 2) month = '0' + month;
    if (day.length < 2) day = '0' + day;

    return [year, month, day].join('-');
}
<div class="form-inline" id="Age">
  <label for="age">Age</label>
  <input id="age" type="integer" name="age" onchange="validatedob()">
</div>

<div class="form-inline" id="birth">
  <label for="DOB">Date of Birth</label>
  <input id="dob" type="date" value="Unknown" name="date_of_birth" max="31-12-2030">
</div>

PS:出于性能目的,请避免在每个方法调用中重复document.getElementById(...)。像我的示例一样完成一次。

答案 3 :(得分:1)

这是一个非常简单的解决方案,可以正常工作,并且可以对HTML进行一些更改。

更改为HTML:

  • divlabel都具有ID“年龄”,这必须是唯一的。
  • type="integer"不存在,所以我将其更改为type="number"
  • 而且value="unknown"的格式不是正确的“ yyy-MM-dd”,所以我只是删除了它。
  • for="DOB"for="dob",现在也可以使用

代码:

HTML

<div class="form-inline">
    <label for="age">Age</label>
    <input id="age" type="number" name="age"onchange="validatedob()">
</div>
<div class="form-inline" id="birth">
    <label for="dob">Date of Birth</label>
    <input id="dob" type="date" name="date_of_birth" max="31-12-2030">
</div>

JavaScript

function validatedob() {
    var age_value = document.getElementById("age").value;
    var current_date = new Date();
    var birth_date = new Date(current_date.getFullYear() - age_value, current_date.getMonth(), current_date.getDate() + 1);

    document.getElementById("dob").valueAsDate = birth_date;
}