PHPで日付のバリデーションを行いたいです


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

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

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

[code]

    //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); //後ろ２文字
        $tmp = (int)$tmp;
    
        if ( ($tmp % 5) == 0 || $check['Date'] == $wk) 
        {
            return true;
        } else {
            return false;
        }
    }
    
[/code]

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

よろしくお願いします。




  
挙動確認してませんが、例えば以下のようにしてみてはどうでしょうか。

・5,10,15,20,25日である

[code]

    function isMultipleOf5($date) {
        $day = date('d', strtotime($date));
        return (($day % 5) == 0 && $day < 30) ? true : false;
    }
    
[/code]

・月末である

[code]

    function getEndOfMonth($date) {
        $yearmonth = date('y/m', strtotime($date));
        return date('Y/m/d', strtotime("last day of {$yearmonth}"));
    }
    
    function isEndOfMonth($date) {
        $endOfMonth = getEndOfMonth($date);
        return ($date === $endOfMonth) ? true : false;
    }
    
[/code]

[PHP: 相対的な書式 - Manual](http://php.net/manual/ja/datetime.formats.relative.php)

・過去30日以内である（１ヶ月に変更になる可能性有）

[code]

    function within30Days($date) {
        $diff = strtotime("-30 days") - strtotime("{$date} -30 days");
    //    $diff = strtotime("-1 month") - strtotime("{$date} -1 month");
        return ($diff < 0) ? true : false;
    }
    
[/code]

