2012-01-28 116 views
0

我正在開發一個系統,要求您至少應年滿18歲才能註冊。Javascript日期差異

爲了做到這一點驗證我已經在以下方式在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

任何客戶端驗證可以很容易地規避。始終在服務器端進行驗證。雖然在這種情況下,你甚至不能確保一個人提供他真正的生日。 – 2012-01-28 11:03:03

+0

是的 - 這是更多的用戶意見的責任問題,而不是一個完整的信用檢查或任何東西。客戶端驗證沒問題。 – cloudfeet 2014-11-28 14:24:05

回答

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日。

+2

重要的一點。我們不會計算我們出生以來的毫秒數來慶祝我們的生日。 – 2012-01-28 11:15:12

+0

@mack是的,爲什麼你會期待其他? – 2012-01-28 11:23:02

+0

對不起,'var birthDate = new Date(1994,1,27); var today = new Date();如果(today> = new Date(birthDate.getFullYear()+ 18,birthDate.getMonth(),birthDate.getDay())){ alert(「Allow」); } else { alert(「Deny」); } '試試這個,它會提示拒絕 – mack 2012-01-28 11:29:49

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> 
+0

'var dob = new moment([1985,1,30]); var age = new moment()。diff(dob,'years') alert(age);'it alerts 27 – mack 2012-01-28 11:38:37

+0

在我的機器上,有3個測試失敗:http://momentjs.com/test/ – user123444555621 2012-01-28 12:21:50

+0

人們出生於1985年,今年年齡27歲,更多的數學研究...... – Teemu 2012-01-28 13:43:34