2012-12-06 42 views
0

我有一個函數,它是將用戶的出生日期發送到數據庫的類或庫的一部分。出於某種原因,保存該信息($this->birthdate)的變量發送的值爲0000-00-00,而不是實際的出生日期。在函數中分配日期後,PHP變量的值爲0

這裏是我的示例代碼:

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

不要以爲你的代碼是正確的,永遠的var_dump()的結果,以確認你的輸出。 –

回答

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

這僅僅是沒有意義的,我的猜測是,第二行導致您的問題。 稍後你有

$this->birthdate=($birthDate1); 

所以生日有一個數組不是一個字符串與日期。

+0

它毫無意義? –

+0

你連接了3個變量,然後使用explode將它們放入數組中,如果你在數組中需要它們,只需編寫'$ birthDate1 = array($ this-> birth_year,$ this-> birth_month,$ this-> birth_day)' – Gustek

+0

看你的觀點。我已經通過將$ this-> birthdate放置在答案的第一行代碼下解決了這個問題。 –

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功能確保$生日是一個數字。

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