2009-11-28 12 views
8

Sadece merak ediyorum, bir kullanıcının 18 yaşından büyük bir tarih yazdığını doğrulamak için bunu yapabilir miyim? , http://www.php.net/manual/en/function.date-diff.php Tipler daha umut verici: Yaşın 18 yaşından büyük olduğunu doğrulayın

//Validate for users over 18 only 
function time($then, $min) 
{ 
$then = strtotime('March 23, 1988'); 
//The age to be over, over +18 
$min = strtotime('+18 years', $then); 
echo $min; 
if(time() < $min) 
{ 
die('Not 18'); 
} 
} 

Sadece bu fonksiyon date_diff tökezledi.

+1

üzerinde çalışır. Umarım bu, en üst düzey güvenlik için değildir! ;-) Yetişkinlere erişmeye çalışan bütün çocukların doğru yaşlarına gireceğinden eminim. – scunliffe

+0

Hayır, sadece php hakkında bir şeyler öğreniyorum, muhtemelen hiç güvenlik gibi değil. – Newb

cevap

19

Neden değil? Benim için tek sorun, Kullanıcı Arayüzüdür - hata mesajını kullanıcıya nasıl gönderirsiniz.

Başka bir notta, uygun bir doğum günü yapmadığınız için işleviniz düzgün çalışmayabilir (sabit bir doğum günü kullanıyorsunuz). Sen

//Validate for users over 18 only 
function validateAge($then, $min) 
{ 
    // $then will first be a string-date 
    $then = strtotime($then); 
    //The age to be over, over +18 
    $min = strtotime('+18 years', $then); 
    echo $min; 
    if(time() < $min) { 
     die('Not 18'); 
    } 
} 

sonra $ için '1988 23 Mart' değişmelidir Veya şunları yapabilirsiniz:

// validate birthday 
function validateAge($birthday, $age = 18) 
{ 
    // $birthday can be UNIX_TIMESTAMP or just a string-date. 
    if(is_string($birthday)) { 
     $birthday = strtotime($birthday); 
    } 

    // check 
    // 31536000 is the number of seconds in a 365 days year. 
    if(time() - $birthday < $age * 31536000) { 
     return false; 
    } 

    return true; 
} 
+0

Sadece bu işi yapıyordum. editör. : P – William

+0

haha ​​sanırım daha hızlı mıydım? benim hatam. – mauris

+8

Ayrıca, bir yılda teknik olarak 365.242199 gün olduğunu unutmayın. Yani 31536000 yerine 31556926 ile çarpmanız gerekir. Ayrıca, Google bu tür hesaplamalar hakkında gerçekten çok hoş, sadece Google'a "saniye olarak 1 yıl" soruyor :) – William

2
if(strtotime("1988/03/23") < (time() - (18 * 60 * 60 * 24 * 365))) { 
    print "yes"; 
} else { 
    print "no"; 
} 

... sıçramaları yıllardır muhasebe değil İşte

+0

Aynı amaca ulaşmak için pek çok yol şaşırtıcı. – Newb

11

basitleştirilmiş olduğu ancak Toronto'da bir bankacılık sistemi için kullandığımdan ayıkladım ve bu her zaman mükemmel bir şekilde çalıştı ve artık 366 gün süren sıçramaları hesaba kattı.

/* $dob is date of birth in format 1980-02-21 or 21 Feb 1980 
* time() is current server unixtime 
* We convert $dob into unixtime, add 18 years, and check it against server's 
* current time to validate age of under 18 
*/ 

if (time() < strtotime('+18 years', strtotime($dob))) { 
    echo 'Client is under 18 years of age.'; 
    exit; 
} 
-1

Php dosyası

if (isset($_POST['bdate'])){ 
    $bdate = $_POST['bdate']; 
    $age = (date("Y-m-d") - $bdate); 



} //if age if 17 or younger error msg 
if ($age < 17) { 
    echo "Must 18 or older."; 
} 
else{ //if age is 120 or greather error msg 
    if ($age > 120) { 
     echo "Real age please."; 
    } 
    else{ 
     echo "$age"; 
    } 
} 

HTML kodu:

<form action="" method="POST"> 

    <p><label>Birth Date &nbsp;&nbsp;: </label> 
    <input id="bdate" type="date" name="bdate" required placeholder="" /></p> 
    <input class="btn register" type="submit" name="submit" value="Register" /> 
</form> 
2

Ben bunun için DateTime sınıfı kullanarak en iyi olduğunu düşünüyorum.

$bday = new DateTime("22-10-1993"); 
$bday->add(new DateInterval("P18Y")); //adds time interval of 18 years to bday 
//compare the added years to the current date 
if($bday < new DateTime()){ 
    echo "over 18"; 
}else{ 
    echo "below 18"; 
} 

DateTime :: fark da geçerli tarihle tarih karşılaştırmak için kullanılabilir.

$today = new DateTime(date("Y-m-d")); 
$bday = new DateTime("22-10-1993"); 
$interval = $today->diff($bday); 
if(intval($interval->y) > 18){ 
    echo "older than 18"; 
}else{ 
    echo "younger than 18"; 
} 

N/B: $ yaşlar 18 yıl veya daha bugün $ büyükse 1) ikinci yöntem için, bu eski dönecektir, böylece girilen emin tarih yapacaktır $ bugün daha azdır. 2) DateTime, php 5.2.0 ve üzeri

İlgili konular