0

我有一个函数,它是类或库的一部分,它将用户的生日发送到数据库。出于某种原因,保存该信息的变量($this->birthdate)发送的值是 0000-00-00 而不是实际的生日。

这是我的示例代码:

function isAgeValid(){

     $birthDate1=$this->birth_year.'-'.$this->birth_month.'-'.$this->birth_day;
     $birthDate1 = explode("-", $birthDate1);
     $age = (date("md", date("U", mktime(0, 0, 0, $birthDate1[0], $birthDate1[1], $birthDate1[2]))) > date("md")
            ? ((date("Y")-$birthDate1[2])-1):(date("Y")-$birthDate1[2]));
    $this->birthdate=($birthDate1);

    return ($age > 17);
}
4

3 回答 3

2

我的建议是将数据库中的字段更改为键入TIMESTAMP并将其作为Unix Timestamp保存到数据库中。如果您需要再次从时间戳中提取人类可读的日期,请使用$birthdate = date("Y-m-d",$timestamp);

$birthdate = strtotime($this->birth_year." ".$this->$birth_month." ".$this->birth_day
if($birthdate !== false)){
    mysql_query("INSERT INTO table(timestamp_field)VALUES('".$birthdate."')");
}

这也可以防止SQL 注入,因为 strtotime 函数确保 $birthdate 是一个数字。

于 2012-12-06T03:41:11.253 回答
1
$birthDate1=$this->birth_year.'-'.$this->birth_month.'-'.$this->birth_day;
 $birthDate1 = explode("-", $birthDate1);

这毫无意义,我的猜测是第二行会导致您的问题。后来你有

$this->birthdate=($birthDate1);

所以生日有一个数组而不是日期字符串。

于 2012-12-06T03:26:26.233 回答
1

更短/更清洁:

function isAgeValid() {
    $this->birthdate = $this->birth_year . '-' . $this->birth_month . '-' . $this->birth_day;
    $age = date('Y') - $this->birth_day - (date("md", strtotime($this->birthdate)) > date("md") ? 1 : 0);
    return ($age > 17);
}
于 2012-12-06T04:00:06.473 回答