タイトルの通りです。
行いたいバリデーションの内容は以下の3つです。

ユーザーが入力した日付が
・5,10,15,20,25日である
・月末である
・過去30日以内である(1ヶ月に変更になる可能性有)

自分なりに書いてみたコードはこんな感じです。
※$check['Date']には YYYY/mm/dd の形式でDBから取ってきたデータが入っています。

//30日以内
function DateChk30( $check ) {
    $today = date("Y/m/d");
    $checkunix = strtotime($check['Date']);
    $todatunix = strtotime($today);
    $diff = ($todatunix - $checkunix ) / ( 60 * 60 * 24);

    if ($diff < 30 ) 
    { 
        return true;
    } else {
        return false;
    }
}

//5,10,15,20,25,月末
function DateChk( $check ) {
    $wk = date('Y/m/t');               //月末
    $tmp = substr($check['Date'], -2); //後ろ2文字
    $tmp = (int)$tmp;

    if ( ($tmp % 5) == 0 || $check['Date'] == $wk) 
    {
        return true;
    } else {
        return false;
    }
}

これだと31日が存在する月の30日でも通してしまうので困っています。
switchを使って1日ずつ設定するしかないでしょうか。。
何か良い方法がありましたらご教授ください。
また、全体的に拙いソースだと思いますので、綺麗に書ける書き方があればご教授ください。

よろしくお願いします。