Javascript中的日期差异

mac*_*ack 0 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; 
Run Code Online (Sandbox Code Playgroud)

Ada*_*man 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
}
Run Code Online (Sandbox Code Playgroud)

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

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

  • 很重要的一点.我们不会通过计算自出生以来的毫秒来庆祝我们的生日. (2认同)