我怎么能计算出不少于18岁的日期呢


how can i calculate date not less than 18

我试图找到不少于18年的日期,我尝试了以下代码,但对我不起作用。

// validate birthday
function validateAge($then, $min)
{
    // $then will first be a string-date
    $then = strtotime($then);
    echo "<br>";
    echo 'test1-';
    var_dump( $then );
    exit;
    //The age to be over, over +18
    $min = strtotime('+18 years', $then);
    if(time() < $min)  {
        die('Not 18'); 
    }
}
$res = validateAge('2016-02-29', $min = 18);
var_dump($res);

我想你看到上面的问题,你可以看到,日期是无效的,即使我通过了错误的日期,它显示的是$then=strtotime($then);

var_dump($then)显示int

我的问题是,它如何打印时间戳,如果我们传递了无效的日期。

您的逻辑是正确的。移除不需要的模具、退出和回波

function validateAge($then, $min)
{
    // $then will first be a string-date
    $then = strtotime($then);
    //The age to be more then min years
    $min = strtotime('+'. $min . ' years', $then);
    return time() > $min;
}
$res = validateAge('2016-02-29', $min = 18);
echo $res ? 'O''key' : "Not $min years"; 

演示

尝试一下类似的东西

function compareAge($date,$min=18)
{
    $strdate = strtotime($date);
    $curdate = strtotime("today");
    $datefin=date("Ymd",$curdate)-date("Ymd",$strdate);
    $age=substr($datefin,0,strlen($datefin)-4);
    return $age>=$min;
}
var_dump(compareAge("2013-05-13"));

演示

您可以使用以下方法:

public function validateAge($then)
{
  $then= date_create($then);
  $now = date_create("now");
  $diff = $now->diff($then);
  if ($diff->y > 18)
  {
  die('not 18');
  }
}

重复:在PHP 中计算2个日期之间的年数

使用datetime对象来节省各种痛苦。它要简单得多。

function validateAge(DateTime $then, $min = 18)
{
    $now = new DateTime();
    $minimum = clone($now);         // you could just modify now, but this is simpler to explain
    $minimum->modify("-$min years");

    if($then < $minimum) {
        return false;
    } 
    return true;
}
echo validateAge(new DateTime('1-1-1997')) ? 'true' : 'false';  // returns false
echo validateAge(new DateTime('1-1-1999')) ? 'true' : 'false';  // returns true

参见示例

哇,这么多人都很努力。如果你喜欢很简单:

<?php
function validateAge($date) {
    return date_create('18 years ago') > date_create($date);
}
var_dump(
    validateAge('2010-10-05'),
    validateAge('1992-09-02')
);

输出

bool(false)
bool(true)

在3v4l.org 上与我一起玩

编辑:也适用于$min参数:

<?php
function validateAge($date, $min) {
    return date_create("$min years ago") > date_create($date);
}
var_dump(
    validateAge('2010-10-05', 18),
    validateAge('1992-09-02', 18)
);