公共方法整合(三)时间相关方法

同样是方法整合类型

不过本篇主要存储的是一些关于时间操作类型的公共方法

方法目录:

  1. 获取两个时间之间相差的年、月、日、时、分、秒及总天数
  2. 根据时间获取对应当年多少周
  3. 计算当年有多少周
  4. 获取指定周的开始时间与结束时间
  5. 根据时间戳获取是几秒钟、几分钟...前
  6. 获取对应 GMT/UTC 日期和时间

1.获取两个时间之间相差的年、月、日、时、分、秒及总天数

方法如下:

/**
 * 获取两个时间之间相差的年、月、日、时、分、秒及总天数
 * @param  [type] $str 开始时间
 * @param  [type] $end 结束时间
 * @return [type]      返回数据集
 */
function diffTime($str,$end)
{
    $str = new DateTime($str);
    $end = new DateTime($end);
    $res = $str->diff($end);

    $return['y'] = $res->format('%Y');   #
    $return['m'] = $res->format('%m');   #
    $return['d'] = $res->format('%d');   #
    $return['h'] = $res->format('%h');   #
    $return['i'] = $res->format('%i');   #
    $return['s'] = $res->format('%s');   #
    $return['a'] = $res->format('%a');   #总天数

    return $return;
}

#调用测试
$str = '2020-01-01 12:00:00';
$end = '2015-05-20 22:10:22';
$res = diffTime($str,$end);

echo "<pre>";
print_r($res);
die;

结果如下:

Array
(
    [y] => 04
    [m] => 7
    [d] => 11
    [h] => 13
    [i] => 49
    [s] => 38
    [a] => 1686
)

2020年08月28日


2.根据时间获取对应当年多少周

方法如下:

        $res = intval(date('W',strtotime('2020-08-28')));  #获取第几周
        echo $res;

结果如下:

35

2020年08月28日


3.计算当年有多少周

方法如下:

/**  
* 计算一年有多少周,每周从星期一开始,  
* 如果最后一天在周四后(包括周四)算完整的一周,否则不计入当年的最后一周  
* 如果第一天在周四前(包括周四)算完整的一周,否则不计入当年的第一周  
* @param int $year  
* return int  
*/   
function week($year)
{   
    $year_start = mktime(0,0,0,1,1,$year);   
    $year_end = mktime(0,0,0,12,31,$year);   
    if (intval(date('W',$year_end))===1){   
        return date('W',strtotime('last week',$year_end));   
    }else{   
        return date('W',$year_end);   
    }   
}   

    #调用测试
    $res = week(date('Y'));
    echo $res;

结果如下:

53

2020年08月28日


4.获取指定周的开始时间与结束时间

方法:

/** 
* 获取某年第几周的开始日期和结束日期 
* @param int $year 
* @param int $week 第几周; 
*/ 
function weekday($year,$week=1)
{ 
    $year_start = mktime(0,0,0,1,1,$year); 
    $year_end = mktime(0,0,0,12,31,$year); 

    // 判断第一天是否为第一周的开始 
    if (intval(date('W',$year_start))===1)
    {
        $lastday=date("Y-m-d",strtotime(date('Y-m-d',$year_start)." Sunday"));
        $start=strtotime(date("Y-m-d",strtotime($lastday."-6 days"))); 
    //$start = $year_start;//把第一天做为第一周的开始 
    }else{ 
        $start = strtotime('+1 monday',$year_start);//把第一个周一作为开始 
    } 

    // 第几周的开始时间 
    if ($week==1){ 
        $weekday['start'] = $start; 
    }else{ 
        $weekday['start'] = strtotime($week.' monday',$start); 
    } 

    // 第几周的结束时间 
    $weekday['end'] = strtotime('+1 sunday',$weekday['start']); 
    if (date('Y',$weekday['end'])!=$year)
    { 
        $weekday['end'] = $year_end; 
    } 
    return $weekday; 
    // return date('m.d',$weekday['start']).'-'.date('m.d',$weekday['end']);
} 
    #调用测试
    $res = weekday(date('Y'),'35');
    echo "<pre>";
    print_r($res);

结果如下:

Array
(
    [start] => 1598198400
    [end] => 1598716800
)

此方法可根据自己需要转换为自己需要的格式

此方法原来并不支持跨年,在此为博主大大的改动下可以的,

原来我是看到评论才找到这篇的,最开始不支持跨年的并未有记录,抱歉

原博主地址:

 曉笙通幽  : https://www.cnblogs.com/lin-er/p/11295653.html#4589275

2020年08月28日


5.根据时间戳获取是几秒钟、几分钟...前

方法:

/**
 * 根据时间戳获得是几秒钟、几分钟..前
 * @param  [type] $time 对应时间戳
 * @return [type]       对应返回
 */
function format_date($time)
{
    $t=time()-$time; 
    //<span style="white-space:pre">    </span>//echo time(); 
    $f=array( 
        '31536000'=>'年', 
        '2592000'=>'个月', 
        '604800'=>'周', 
        '86400'=>'天', 
        '3600'=>'小时', 
        '60'=>'分钟', 
        '1'=>'秒' 
    ); 
    foreach ($f as $k=>$v)    { 
        if (0 !=$c=floor($t/(int)$k)) { 
            return $c.$v.'前'; 
        } 
    } 
} 
    #测试调用
    $res = format_date(time()-10);
    echo "<pre>";
    print_r($res);

调用结果:

10秒前

原文地址:

蓦然回首恍然如梦 : https://www.cnblogs.com/bluealine/p/7884519.html

方法二:

/**
 * 根据时间戳获得是几分钟,几秒钟,之前
 * @param  [type] $addtime [description]
 * @return [type]          [description]
 */
function  getzpinfotime($addtime)
{
    $times = time()-$addtime;
    if($times < 60)
    {
        $trim = $times."秒前";
    }
    elseif($times < 3600 && $times>60)
    {
        $trim = ceil($times/60)."分钟前";
    }
    elseif($times < 86400 && $times > 3600)
    {
        $trim = ceil($times/3600)."小时前";
    }
    else if($times < 604800 && $times > 86400)
    {
        $trim = ceil($times/86400)."天前";
    }
    else if($times < 2592000 && $times > 604800)
    {
        $trim = ceil($times/604800)."周前";
    }
    else if($times < 31536000 && $times > 2592000)
    {
        $trim = ceil($times/2592000)."月前";
    }
    else{
        $trim = ceil($times/31536000)."年前";
    }
    return $trim;
}

2020年08月28日


 6.获取对应GMT/UTC 日期和时间

方法函数如下:

        
        #方法一
        date_default_timezone_set("GMT");
        $Timestamp = date("Y-m-dTH:i:s");
        #方法二
        $Timestamp = gmdate("Y-m-dTH:i:s");

2020年09月08日

方法持续更新中...

没有谁是离不开谁的,只是愿意不愿意罢了...

2020年08月27日

时间会冲淡一切,不管你承认不承认,这个是事实。。

2020年09月08日

原文地址:https://www.cnblogs.com/YFYQ/p/13578189.html