在函数中指定日期后,PHP变量的值为0

时间:2012-12-06 03:20:30

标签: php mysql class date

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

以下是我的示例代码:

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);
}

3 个答案:

答案 0 :(得分: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 injections因为strtotime函数确保$ birthdate是一个数字。

答案 1 :(得分:1)

$birthDate1=$this->birth_year.'-'.$this->birth_month.'-'.$this->birth_day;
 $birthDate1 = explode("-", $birthDate1);

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

$this->birthdate=($birthDate1);

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

答案 2 :(得分: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);
}