欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

PHP下几个与时间相关的方法

程序员文章站 2024-01-22 20:05:22
...

通过年份和周数返回开始时间和结束时间

/**
* @param int $year 要计算日期的年份
* @param int $week 要计算的周数
* @return bool 返回周开始和结束时间的时间戳和格式化日期
*/
protected function getWeekStartAndEndDate($year, $week = 1)
{
    $year = (int)$year;
    $week = (int)$week;
    //按给定的年份计算本年周总数
    $date = new \DateTime();
    $date->setISODate($year, 53);
    $weeks = max($date->format("W"), 52);
    //如果给定的周数大于周总数或小于等于0
    if ($week > $weeks || $week <= 0) {
        return false;
    }
    //如果周数小于10
    if ($week < 10) {
        $week = '0' . $week;
    }
    //当周起止时间戳
    $timeYmd['start_tamp'] = strtotime($year . 'W' . $week);
    $timeYmd['end_tamp'] = strtotime('+1 week -1 day', $timeYmd['start_tamp']);
    //当周起止日期
    $timeYmd['start'] = date("Y-m-d", $timeYmd['start_tamp']);
    $timeYmd['end'] = date("Y-m-d", $timeYmd['end_tamp']);
    //返回日期形式
    return $timeYmd;
}

如果想求出当前周数或者几周前(后)的周数,可以使用如下方法

date('W', time()); // 当前周数
date('W', time()) - 2; // 两周以前的周数
date('W', time()) + 3; // 三周以后的周数

求上个月, 三个月后的第一天

/**
* @param string $m 偏移的月数
* @return false|string 要计算的日期
*/
public function calculationDateTime($m = '0')
{
    $tmp_date = date("Ym");
    //切割出年份
    $tmp_year = substr($tmp_date, 0, 4);
    //切割出月份
    $tmp_mon = substr($tmp_date, 4, 2);
    return date('Y-m-1 00:00:00', $month = mktime(0, 0, 0, $tmp_mon + (int)$m, 1, $tmp_year));
 }

这里求的是整月的第一天.
如:今天是2017-05-03, 求上个月的第一天就是

calculationDateTime(-1); // 返回: 2017-04-01 00:00:00

求三个月后的第一天就是

calculationDateTime(3); // 返回: 2017-08-01 00:00:00

求当月第一天就是

calculationDateTime(); //返回 2017-05-01 00:00:00