首页 文章

提取年份并计算日期差异

提问于
浏览
0

我在编码方面相对较新,最近我必须对表格中输入的数据进行一些日期操作 . 我搜索了很多,但我没有找到适合我的解决方案 .
这是问题:

用户在HTML中的datetime-local字段中输入以下数据:
1)入学年份(日期1)
2)毕业年份(日期2)
3)生日(日期3)

我需要一个使用此日期和输出的JQuery或JavaScript脚本:
1)入学年份,根据录取日期(我知道有一个getFullYear函数,但我无法正确使用它...)>>> result1
2)毕业年龄(出生日期和毕业日期之间的日期差异 . >>>结果2

我尝试添加datepicker,但不知怎的,我看起来非常糟糕的日历显示在框上 . 我无法安装datetimepicker ...

先感谢您 . 非常感谢您的帮助 .

这是我的HTML代码 .

<input id="date1" type="datetime-local"/>
<label for="date1">admittion in Colleage</label>

<input id="result1" type="text" readonly="true" name="year" placeholder="=(getFullYear from date1)"/> <label for="result1">year</label>
<input id="date2" type="datetime-local" /> <label for="date2">graduation</label>
<input id="date3" type="date" name="born" /> <label for="date3">born</label>
<input id="result2" type=“text” name="age" readonly="true" placeholder="=DATEDIF(Date3, Date2, Year)"/></textarea> <label for="result2">age</label>

4 回答

  • 2

    您没有包含对此问题更重要的js代码 . 我将包括一些应该有用的功能 .

    要查找日期中的年份,我使用以下函数

    function getYearFromDate(date){
      const yearFromDate = new Date();
      yearFromDate.setTime(date.getTime());
      yearFromDate.setFullYear(date.getFullYear() + 1);
      return yearFromDate;
    }
    
    console.log(getYearFromDate(new Date()));
    

    毕业年龄主要来自Calculate age given the birth date in the format YYYYMMDD

    function getYearsBetween(oldDate, newDate) {
        var age = newDate.getFullYear() - oldDate.getFullYear();
        var m = newDate.getMonth() - oldDate.getMonth();
        if (m < 0 || (m === 0 && newDate.getDate() < oldDate.getDate())) {
            age--;
        }
        return age;
    }
    

    包括moment.js也是一个选项,但如果可以的话,它是一个我想避免的大型库 .

    EDIT 我以为你想要一年的第一天 . 从日期开始全年变得更加容易 .

    const date = new Date();
    
    console.log(date.getFullYear());
    

    Edit :现在一起来

    function updateGradYear(event) {
      console.log(event.target.value);
      let date = new Date(event.target.value);
      document.querySelector('#result1').value = date.getFullYear();
    }
    
    function updateAge() {
      let gradDate = new Date(document.querySelector('#date2').value);
      console.log(document.querySelector('#date3').value);
      let birthdate = new Date(document.querySelector('#date3').value);
      document.querySelector('#result2').value = gradDate.getFullYear() - birthdate.getFullYear();
    }
    
    
    
    // set some default values
    let today = new Date();
    document.querySelector('#date1').value = today.toISOString().split('.')[0];
    document.querySelector('#result1').value = today.getFullYear();
    document.querySelector('#date2').value = today.toISOString().split('.')[0];
    
    let birthdate = new Date(today.getTime);
    birthdate.setFullYear(1984);
    console.log(birthdate.toISOString().slice(0, 10).replace(/\//g, "-"));
    document.querySelector('#date3').value = birthdate.toISOString().slice(0, 10).replace(/\//g, "-");
    
    updateAge();
    
    <input id="date1" type="datetime-local" onchange="updateGradYear(event)" />
    <label for="date1">admittion in Colleage</label>
    
    <input id="result1" type="number" readonly="true" name="year" placeholder="=(getFullYear from date1)" /> <label for="result1">year</label>
    <input id="date2" type="datetime-local" onchange="updateAge()" /> <label for="date2">graduation</label>
    <input id="date3" type="date" name="born" onchange="updateAge()" /> <label for="date3">born</label>
    <input id="result2" type=“text” name="age" readonly="true" placeholder="=DATEDIF(Date3, Date2, Year)" /></textarea> <label for="result2">age</label>
  • 1

    让我知道这对你有用!正如我所说,请在运行此代码时输入所有字段!

    $('#date1, #date2').on('blur',function(){
      var dc = document.querySelector('input[id="date1"]');
      var date = new Date(dc.value);
      var collegeadmission = date.getFullYear();
      $('#result1').val(date.getFullYear());
      
      dc = document.querySelector('input[id="date2"]');
      date = new Date(dc.value);
      var collegegrad = date.getFullYear();
      if(! isNaN(collegegrad))
       $('#result2').val(collegegrad - collegeadmission);
    })
    
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <input id="date1" type="datetime-local"/>
    <label for="date1">admittion in Colleage</label>
    
    <input id="result1" type="text" readonly="true" name="year" placeholder="=(getFullYear from date1)"/> <label for="result1">year</label>
    <input id="date2" type="datetime-local" /> <label for="date2">graduation</label>
    <input id="date3" type="date" name="born" /> <label for="date3">born</label>
    <input id="result2" type=“text” name="age" readonly="true" placeholder="=DATEDIF(Date3, Date2, Year)"/></textarea> <label for="result2">age</label>
  • -1

    check out this url: http://jsbin.com/vebiwogipu/edit?html,js,output

    确保按照html中的说明正确填写所有日期和时间 .

    同样,您可以在单击或更改事件时附加输出 . 并且您可以在代码中利用 getMonth ()和 getDay ()来获得所需的输出 .

  • -1

    enter image description here

    看一下标签,可能会发出警报,单击按钮时,它会显示第一个日期字段的年份 . 正如我所说,你需要添加休息逻辑 .

    让我知道它是否有意义,如果没有请添加更多信息让我明白!

相关问题