【问题标题】:Calculate Date But Result (return) Still Nan计算日期但结果(返回)还是楠
【发布时间】:2016-06-27 16:42:17
【问题描述】:

这是我的 HTML

<input type="text" class="dateofbirthpicker">
<input type="text" id="usia">

脚本

$(function() {
    $('.dateofbirthpicker').datepicker({
        dateFormat: 'yyyy/mm/dd'
    });
});

window.onload=function() {
    $('.dateofbirthpicker').on('change', function() {
        var dob = new Date(this.value);
        var today = new Date();

        var age = Math.floor((today-dob) / (1000 * 60 * 60 * 24 * 360));
        ages = parseInt(age);
        $('#usia').val(ages);
    });
}

我有上面的脚本来计算从日期开始的年龄。它在 Firefox 中返回年龄,但在 Chrome 中返回 NaN

我正在这样做Jquery Date.parse returning NaN in Chrome browser?

当我运行以下命令时,结果是无效日期...

var dob = new Date(this.value);

【问题讨论】:

  • 仍然不能......当我运行这个 >> var dob = +new Date(this.value) 结果是:无效日期..有什么建议吗? @Rayon
  • @tara Seems to run fine in Chrome,您确定 this.value 是 Date 构造函数的有效参数吗?
  • @tara 你用的是哪个日期选择器??
  • 简单解决方案:dateFormat: 'yy/mm/dd' as yyyy 将给出日期为20162016-mm-dd

标签: javascript datepicker


【解决方案1】:

将您的日期格式更改为dateFormat: 'yy/mm/dd'

来自specs

  • y - 年份(两位数)
  • yy - 年份(四位数)

$(function() {
  $('.dateofbirthpicker').datepicker({
    dateFormat: 'yy/mm/dd',
    onSelect: function() {
      var dob = new Date(this.value);
      var today = new Date();
      var age = Math.floor((today - dob) / (1000 * 60 * 60 * 24 * 360));
      ages = parseInt(age);
      $('#usia').val(ages);
    }
  });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
<script src="http://code.jquery.com/ui/1.8.18/jquery-ui.min.js"></script>
<link href="http://code.jquery.com/ui/1.8.21/themes/base/jquery-ui.css" rel="stylesheet" />
<input type="text" class="dateofbirthpicker">
<input type="text" id="usia">

JSFiddle Demo

【讨论】:

  • 是的,我尝试仍然无法 var dob = new Date(this.value) ....... @rayon : 无效日期.. 我认为它的问题 :(((((( (
  • 我只是要添加一个原因,for the date-picker a single y represents 2 digits 而不是一个。所以'yyyy/mm/dd' 无效。
  • @tara,你能指定什么是无效的吗?我为您提供了工作小提琴和 sn-p!您可以在此处突出显示问题..
  • @SpencerWieczorek,我们可能在同一时间编辑,或者您快了几秒钟!不管怎么说,多谢拉! ;)
  • @tara,你能在我提供的 sn-p 中重现相同的内容吗?
【解决方案2】:

感谢大家的讨论和建议.. 我从这里得到答案
New Date() returns invalid date

  $(function() {
    $('.dateofbirthpicker').datepicker({
            dateFormat: 'dd/mm/yy'
          });
  });
  window.onload=function(){
    $('.dateofbirthpicker').on('change', function() {
          var dselect = $(".dateofbirthpicker").val();
          var match = /(\d+)\/(\d+)\/(\d+)/.exec(dselect);
          var dob = new Date(match[3], match[2], match[1]);
          var today = new Date();

          var age = Math.floor((today-dob) / (1000 * 60 * 60 * 24 * 360));
      $('#usia').val(age);
    });
  }

【讨论】:

  • dateFormat决定使用.val()方法访问的日期值..不需要通过RegEx进行测试
  • 但是..如果我这样做--->>> var dob = new Date(this.value); --->> 无效日期
  • 因为您没有指定有效的 =mat 被 new Date 接受
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-04-25
  • 2013-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-05
  • 1970-01-01
相关资源
最近更新 更多