【问题标题】:Age from Date of Birth using JQuery使用 JQuery 从出生日期算起的年龄
【发布时间】:2009-03-18 14:33:56
【问题描述】:

我需要使用 JQuery 计算某人从出生日期算起是否超过 18 岁。

var curr = new Date();
curr.setFullYear(curr.getFullYear() - 18);

var dob = Date.parse($(this).text());

if((curr-dob)<0)
{
    $(this).text("Under 18");
}
else
{
    $(this).text(" Over 18");
}

必须使用一些更简单的函数来比较日期,而不是使用 setFullYear 和 getFullYear 方法。

注意:我想要找到一种新方法的真正原因是代码的长度。我必须将此代码放入限制为 250 个字符的数据库字段中。更改数据库不是一件容易的事。

【问题讨论】:

  • 为什么您在 DB 中的 DateTime 字段不只采用当前日期,而是在代码中计算年龄。
  • 这是一种无需更改任何代码或数据库即可在 GUI 中显示年龄的 hack。当可以计划发布时,我会正确地做到这一点。

标签: javascript jquery datetime


【解决方案1】:

您可能会发现开源 Datejs 库会有所帮助。特别是addYears 函数。

var dob = Date.parse($(this).text());
if (dob.addYears(18) < Date.today())
{
    $(this).text("Under 18");
}
else
{
    $(this).text(" Over 18");
}

以更简洁的方式:

$(this).text(
    Date.parse($(this).text()).addYears(18) < Date.today() ?
    "Under 18" :
    " Over 18"
)

【讨论】:

  • +1 - 似乎比其他人更容易准备。我正在使用这个库,它帮了我很大的忙。
  • 这里的小于运算符不应该是大于吗?
【解决方案2】:
Date.prototype.age=function(at){
    var value = new Date(this.getTime());
    var age = at.getFullYear() - value.getFullYear();
    value = value.setFullYear(at.getFullYear());
    if (at < value) --age;
    return age;
};

var dob = new Date(Date.parse($(this).text()));

if(dob.age(new Date()) < 18)
{
    $(this).text("Under 18");
}
else
{
    $(this).text(" Over 18");
}

【讨论】:

【解决方案3】:

您可以删除 DOB 的单独变量并折叠 if 语句。以下代码包含 165 个字符:

var check = new Date();
check.setFullYear(check.getFullYear() - 18);
$(this).text((new Date("3/6/2009").getTime() - check.getTime() < 0)?"Under 18":"Over 18");

这仍将保留处理闰年所需的逻辑。

【讨论】:

    【解决方案4】:
    $(this).text(((new Date().getFullYear()-Date.parts($(this).text()))>=18)?"Over 18":"Under 18");
    

    更好? :D

    【讨论】:

    • 这似乎只使用年份字段进行计算,不会考虑当前日期的月/日和 DOB。因此,1991 年 12 月出生的人会在 2009 年 1 月以 18 岁以上的年龄回来,这是不正确的(他们在 2009 年 12 月将 18 岁)。
    • 是的......它不会在几个月和几天内生效......如果你想要完整的功能,使用库会很有用,就像在第一个答案中一样。仍然可以构建,但在 250 个字符内可能会很困难。
    【解决方案5】:

    请记住,以上所有答案仅适用于使用分隔符“/”的日期。如果您使用的是其他分隔符,则必须先替换该分隔符。

    var startDate = $('#start_date').val().replace('-','/');
    var endDate = $('#end_date').val().replace('-','/');
    
    if(startDate > endDate){
       // do stuff here...
    }
    

    快乐编码:D

    【讨论】:

      【解决方案6】:

      您可以使用 Date 对象。这将返回两个日期之间的毫秒数。一年有 31556952000 毫秒。

      function dateDiff(var now, var dob)
      {
          return now.getTime() - dob.getTime();
      }
      

      【讨论】:

      • 每年肯定没有那么多毫秒。日期很难。
      • 这并不总是正确的(闰年)
      • 还有闰秒。
      • “每年肯定没有那么多毫秒。日期很难”无论如何都非常接近:365*24*60*60*1000==31536000000(31,536,000,000 - 每年超过 310 亿毫秒; 明智地使用它们)。当然,这里不考虑闰年、闰秒和闰蛙。所以事实上,日期有点软。
      【解决方案7】:

      我的解决方案。

      var startDt=document.getElementById("startDateId").value;
      var endDt=document.getElementById("endDateId").value;
      if( (new Date(startDt).getTime() > new Date(endDt).getTime()))
      {
          ----------------------------------  
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-10-14
        • 2023-04-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多