最新消息:yaf表单扩展中新增加了浮点数、日期和集合的校验。php yaf框架扩展实践三——表单

php中关于时间计算的常用方法

PHP 1909浏览 1评论

在实际工作中经常会碰到时间的计算,电子商务系统的时候经常会碰到要月结的情况,可能就会涉及到月初时间和月末时间的计算。游戏系统每周要刷新数据,涉及到每周开始和结束时间的计算。 还有像诸如月排行、周排行、日排行都会涉及到相应的时间计算,下面分享一些自己总结出来的方法。

月初时间戳计算

月初的时间戳好计算,直接用date和strtotime函数就可以得到,date的时间格式除了年月为动态的外,其余天设置为01,小时分钟秒设置为00:00:00

/**
 * 月初时间戳计算
 *
 * @param int $time 时间戳
 * @return int 月初时间戳
 */
function getMonthStart($time) {
    return strtotime(date("Y-m-01 00:00:00", $time));
}

每月有几天

计算每月有几天,通常会想到根据月份来进行计算,在计算2月份的时候还要判断是否为闰年。当然也可以通过php内置函数cal_days_in_month直接计算:

/**
 * 计算每月有几天
 *
 * @param int $time 时间戳
 * @return int
 */
function getMonthDay($time) {
    return cal_days_in_month(CAL_GREGORIAN, date("m", $time), date("Y", $time));
}

也可以使用date(“t”, $time)来进行计算,使用内置的函数通常来说性能更快,bug更少。不过也可以了解一下其中的原理。

月末时间计算

月初时间戳加上每月的秒数,实际上就是上面两个方法的集合


$time        = time();
$monthStart  = strtotime(date("Y-m-01 00:00:00", $time));
$monthSecond = 86400 * cal_days_in_month(CAL_GREGORIAN, date("m", $time), date("Y", $time));
echo $monthStart + $monthSecond - 1;

判断时间格式是否正确

一般在前端都是让用户使用时间控件进行选择,但是服务端还是进行相应的校验比较严谨,比如2015-02-30就是不合法的时间。

/**
 * 校验日期格式是否正确
 *
 * @param string $date 日期
 * @param string $formats 需要检验的格式数组
 * @return boolean
 */
function checkDateIsValid($date, $formats = array("Y-m-d", "Y/m/d")) {
    $unixTime = strtotime($date);
    if (!$unixTime) { //strtotime转换不对,日期格式显然不对。
        return false;
    }
    //校验日期的有效性,只要满足其中一个格式就OK
    foreach ($formats as $format) {
        if (date($format, $unixTime) == $date) {
            return true;
        }
    }
    return false;
}

微秒计算

date函数只能取到秒,如果要精确到微秒级别可以使用microtime函数


//本例输出182947
echo getMicroSecond(true);

/**
 * 获取当前微秒数
 *
 * @param bool $isWithLeadingZeros 是否需要补齐前导0
 * @return string
 */
function getMicroSecond($isWithLeadingZeros = false) {
    $microTime   = microtime();
    $a           = explode(" ", $microTime);
    $microSecond = $a[0] * 1000000;
    if ($isWithLeadingZeros) {
        while (strlen($microSecond) < 6) {
            $microSecond = "0" . $microSecond;
        }
    }
    return $microSecond;
}

计算今天是本周的第几天

php的内置函数date非常强大,除了格式化时间显示外,还可以通过各种参数获取不用的时间数据,例如可以通过W获取本周是今年的第几周,z参数获取今天是今年的第几天,N参数获取今天是本周的第几天

date_default_timezone_set("Asia/Shanghai");
//获取本周是今年的第几周
echo date("W");
echo "<br />";
//获取今天是今年的第几天
echo date("z");
echo "<br />";
//获取今天是本周的第几天
echo date("N");
echo "<br />";

date加上时间戳参数后就可以获取时间戳对应的一些信息,功能蛮强大的。知道今天是本周的第几天,就可以很容易的计算出本周的开始时间了,然后就可以高一些周排行之类的数据了。

转载请注明:快乐编程 » php中关于时间计算的常用方法

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

网友最新评论 (1)

  1. :grin: :grin: :grin:
    小凡2年前 (2015-11-19)回复