Javascript中的日期差异

时间:2012-01-28 11:00:05

标签: javascript

我正在开发一个系统,要求您至少年满18岁才能注册。

为了做这个验证,我已经按照以下方式在javascript中实现了日期差异,但它不准确,是否有任何javascript函数或其他方法来执行此操作?

var d1=new Date(1985,1,28);
var d2=new Date();
var milli=d2-d1;
var milliPerYear=1000*60*60*24*365.26;
var years_old=milli/milliPerYear; 

2 个答案:

答案 0 :(得分:8)

合法地至少18岁并不是与18年的平均持续时间相对应的时间量(年份并不总是相同的长度)。这是关于您的第18个出生日期之后的当前日期。因此,您应该在生日的年份数上加18,看看这是在当前日期之前还是之后,例如

var birthDate = new Date(1985,1,28);
var today = new Date();
if (today >= new Date(birthDate.getFullYear() + 18, birthDate.getMonth(), birthDate.getDate())) {
  // Allow access
} else {
  // Deny access
}

您也应该在服务器端进行相同的验证。

请注意,这也会以正确的方式处理2月29日出生的人:在这种情况下,JavaScript会创建一个日期对象来代表18年后的3月1日。

答案 1 :(得分:1)

我喜欢http://momentjs.com/

<script src="moment.min.js"></script>
<script>
  var dob = new moment([1985,1,28]);
  var age = new.moment().diff(dob, 'years')

  if (age >= 18) { 
    ...
  }
</script>