龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > web编程 > php编程 >

php 对比日期与判断日期是否合法类

时间:2015-03-30 15:38来源:网络整理 作者:网络 点击:
分享到:
对比日期与判断日期是否合法类 提供了对比两个日期之间的天数,判断日期是否合法,对比日期大小的方法。经测试 isDate 方法执行1W次,耗时 2.5s 同等条件下 checkdate函数 耗时 3.3 s。

提供了对比两个日期之间的天数,判断日期是否合法,对比日期大小的方法。经测试 isDate 方法执行1W次,耗时 2.5s 同等条件下 checkdate 函数 耗时 3.3 s。 isDate 方法比 checkdate 还多校验了 H:i:s 数值。

[PHP]代码

<?php
/**
 * Util_Date
 *
 */

class Util_Date {

    /**
     * 比较 startDate 到 endDate 有多少天
     *
     * @param $date1
     * @param $date2
     *
     * @returns
     */
    public static function calcDiffDays($startDate, $endDate, $round = false) {
        // 0000-00-00,2012-12-33 之类的特殊和非法日期
        if (!self::isDate($startDate) || !self::isDate($endDate)) {
            throw new Exception('参数不是合法的日期');
        }

        $startTime = strtotime($startDate);
        $endTime = strtotime($endDate);
        $seconds = abs($endTime - $startTime);
        if ($round) {
            // 四舍五入方式
            return round($seconds/86400);
        }
        // 只取整数部分,舍去小数方式
        return floor($seconds/86400);
    }

    /**
     * 对比日期的方法,验证日期有效性
     * $bigDate > $smallDate 返回 > 0
     * $bigDate < $smallDate 返回 < 0
     * $bigDate = $smallDate 返回 = 0
     *
     * @param $bigDate
     * @param $smallDate
     *
     * @returns
     */
    public static function dateCmp($bigDate, $smallDate) {
        if (!self::isDate($bigDate) || !self::isDate($smallDate)) {
            throw new Exception('参数不是合法的日期');
        }

        return strcmp($bigDate, $smallDate);
    }

    public static function isDate($dateTime, $checkTime = false) {
        $strArray = explode(' ', $dateTime);
        $date = $strArray[0];
        $time = $strArray[1];
        // 不是 dateTime 格式
        if (!$date || !$time) {
            return false;
        }

        $dateArray = explode('-', $date);
        $year = $dateArray[0];
        $month = $dateArray[1];
        $day = $dateArray[2];
        // 年在 1-9999 年
        if (!self::_checkLimit($year, 1, 9999)) {
            return false;
        }

        if (!self::_checkLimit($month, 1, 12)) {
            return false;
        }

        if (!self::_checkLimit($day, 1, 31)) {
            return false;
        }

        if ($checkTime) {
            $timeArray = explode(':', $time);
            $hour = $timeArray[0];
            $minute = $timeArray[1];
            $second = $timeArray[2];

            if (!self::_checkLimit($hour, 0, 24)) {
                return false;
            }
            if (!self::_checkLimit($minute, 0, 60)) {
                return false;
            }
            if (!self::_checkLimit($second, 0, 60)) {
                return false;
            }
        }

        return true;
    }

    /**
     * 检查字符串是否在 start to 的区间内
     *
     * @param $str
     * @param $start
     * @param $to
     *
     * @returns
     */
    private static function _checkLimit($str, $start, $to) {
        if ($str < $start || $str > $to) {
            return false;
        }

        return true;
    }
}

精彩图集

赞助商链接