我有一个函数,它是将用户的生日数发送到数据库的类或库的一部分。由于某种原因,保存该信息的变量($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);
}
答案 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);
}