日期Input格式化 + 補0 + 防止輸入全碼

部分不太完整的date picker 套件,用戶無法快速選擇年份,所以會喜歡手動輸入

但手動輸入又可能會出錯,所以做了個很簡單的防呆設定,所以把26個英文字也加入也可,但其實大部分再差的date picker也防止了你輸入數字以外的東西,所以我個人而言已足夠

function format_date_enter($date) {
    $date = str_replace('-', '-', $date);
    $date = str_replace('1', '1', $date);
    $date = str_replace('2', '2', $date);
    $date = str_replace('3', '3', $date);
    $date = str_replace('4', '4', $date);
    $date = str_replace('5', '5', $date);
    $date = str_replace('6', '6', $date);
    $date = str_replace('7', '7', $date);
    $date = str_replace('8', '8', $date);
    $date = str_replace('9', '9', $date);
    $date = str_replace('0', '0', $date);
    $date = str_replace(' ', '', $date);
    $date = str_replace(' ', '', $date);
    $date = strtotime($date);
    $date = date('Y-m-d', $date);
    return $date;
}

送上兩個計算出年齡的function

一種是以unixtime 來計算的

//$brithdate_uxintime = '586746945';
function get_age($brithdate_uxintime) {
    $brithdate = date('d/m/Y', $brithdate_uxintime);
    $tz = new DateTimeZone('Europe/Brussels');
    $age = DateTime::createFromFormat('d/m/Y', $brithdate, $tz)
        ->diff(new DateTime('now', $tz))
        ->y;
    return $age;
}

另一種是以“文字格式“直接計算的

//$brithdate = '1988-05-07';
function get_age($brithdate) {
    $currentDate = date("Y-m-d");
    $age = date_diff(date_create($brithdate), date_create($currentDate));
    return $age->format("%y");
}

為什麼不用unixtime or timestamp? 因為出生日期很大可能會大於1970-1-1
而unixtime or timestamp無法保存早於這個時間值的內容 所以我選擇直接用char(10)來保存