与老涂一起写代码

时间相关的功能详解

admin 288 ℃ 0 条
时间相关的功能详解

本篇文章你将清晰深刻了解时间在程序中的应用及相关问题,本来想分开写,索性就全部都放到一起讲吧。

在PHP程序中,一般说的时间是从1970年1月1日以来的时间,并非是从天地初开开始计算的,以下相关函数分别解释时间问题:

time(): 返回当前的Unix时间戳,表示自1970年1月1日以来的秒数。可以用于记录事件的时间戳,或进行时间间隔的计算。

$timestamp = time();
echo $timestamp;


date($format, $timestamp): 根据给定的格式将时间戳格式化为可读的字符串。常用的格式包括年份(Y)、月份(m)、日期(d)、小时(H)、分钟(i)等。

$timestamp = time();
$formattedDate = date('Y-m-d H:i:s', $timestamp);
echo $formattedDate;


strtotime($time, $now): 将人类可读的日期时间字符串转换为Unix时间戳。可以用于解析用户输入的日期时间。

$timeString = '2023-08-18 12:00:00';
$timestamp = strtotime($timeString);
echo $timestamp;


strtotime('now'): 返回当前的Unix时间戳。

$timestamp = strtotime('now');
echo $timestamp;


strtotime('+1 day'): 返回当前时间加一天后的Unix时间戳

$timestamp = strtotime('+1 day');
echo $timestamp;

date( )函数的几种用法

$time: 时间戳
格式:年-月-日:date('Y-m-d',$time)
格式:年-月-日 时:分:秒:date('Y-m-d H:i:s',$time)
格式:年/月/日:date('Y/m/d',$time)
a - "am" 或是 "pm"
A - "AM" 或是 "PM"
d - 几日,二位数字,若不足二位则前面补零; 如: "01" 至 "31"
D - 星期几,三个英文字母; 如: "Fri"
F - 月份,英文全名; 如: "January"
h - 12 小时制的小时; 如: "01" 至 "12"
H - 24 小时制的小时; 如: "00" 至 "23"
g - 12 小时制的小时,不足二位不补零; 如: "1" 至 12"
G - 24 小时制的小时,不足二位不补零; 如: "0" 至 "23"
i - 分钟; 如: "00" 至 "59"
j - 几日,二位数字,若不足二位不补零; 如: "1" 至 "31"
l - 星期几,英文全名; 如: "Friday"
m - 月份,二位数字,若不足二位则在前面补零; 如: "01" 至 "12"
n - 月份,二位数字,若不足二位则不补零; 如: "1" 至 "12"
M - 月份,三个英文字母; 如: "Jan"
s - 秒; 如: "00" 至 "59"
S - 字尾加英文序数,二个英文字母; 如: "th","nd"
t - 指定月份的天数; 如: "28" 至 "31"
U - 总秒数
w - 数字型的星期几,如: "0" (星期日) 至 "6" (星期六)
Y - 年,四位数字; 如: "1999"
y - 年,二位数字; 如: "99"
z - 一年中的第几天; 如: "0" 至 "365"

人性化时间显示:

function formatTime($sTime, $formt = 'Y-m-d') {
  
    if (!$sTime) {
        return '';
    }
  
    //sTime=源时间,cTime=当前时间,dTime=时间差
    $cTime = time();
    $dTime = $cTime - $sTime;
    $dDay = intval(date('z',$cTime)) - intval(date('z',$sTime));
    $dYear = intval(date('Y',$cTime)) - intval(date('Y',$sTime));
  
    //n秒前,n分钟前,n小时前,日期
    if ($dTime < 60 ) {
        if ($dTime < 10) {
            return '刚刚';
        } else {
            return intval(floor($dTime / 10) * 10).'秒前';
        }
    } elseif ($dTime < 3600 ) {
        return intval($dTime/60).'分钟前';
    } elseif( $dTime >= 3600 && $dDay == 0  ){
        return intval($dTime/3600).'小时前';
    } elseif( $dDay > 0 && $dDay<=7 ){
        return intval($dDay).'天前';
    } elseif( $dDay > 7 &&  $dDay <= 30 ){
        return intval($dDay/7).'周前';
    } elseif( $dDay > 30 ){
        return intval($dDay/30).'个月前';
    } elseif ($dYear==0) {
        return date('m月d日', $sTime);
    } else {
        return date($formt, $sTime);
    }
}

时间函数的一些常用写法:

今日开始和结束的时间戳 

$start = mktime(0, 0, 0, date('m'), date('d'), date('Y'));
$end = mktime(23, 59, 59, date('m'), date('d'), date('Y'));


昨日开始和结束的时间戳

$start = mktime(0, 0, 0, date('m'), date('d') - 1, date('Y'));
$end = mktime(23, 59, 59, date('m'), date('d') - 1, date('Y'));


本周开始和结束的时间戳

$start = strtotime(date('Y-m-d', strtotime("this week Monday", time())));
$end = strtotime(date('Y-m-d', strtotime("this week Sunday", time()))) + 24 * 3600 - 1;


上周开始和结束的时间戳 

$start = strtotime(date('Y-m-d', strtotime("last week Monday", time())));
$end = strtotime(date('Y-m-d', strtotime("last week Sunday", time()))) + 24 * 3600 - 1;

本月开始和结束的时间戳 

$start = mktime(0, 0, 0, date('m'), 1, date('Y'));
$end = mktime(23, 59, 59, date('m'), date('t'), date('Y'));


上个月开始和结束的时间戳

$start = mktime(0, 0, 0, date('m') - 1, 1, date('Y'));
$end = mktime(23, 59, 59, date('m') - 1, date('t', $start), date('Y'));


今年开始和结束的时间戳

$start = mktime(0, 0, 0, 1, 1, date('Y'));
$end = mktime(23, 59, 59, 12, 31, date('Y'));


去年开始和结束的时间戳

$start = mktime(0, 0, 0, 1, 1, date('Y') - 1);
$end = mktime(23, 59, 59, 12, 31, date('Y') - 1);


获取两个时间戳相差几天

function day_to_day($start,$end){
    $r = $end-$start;
    if($r<0){
        $day = -($r/86400);
        $day = ceil($day);
    }else{
        $day = ceil($r/86400);
    }
    return $day;
}


JS时间戳转换:做小程序经常遇到时间戳,要转成正常日期

function timestamptotime(timestamp) {
        var date = new Date(timestamp * 1000);//时间戳为10位需*1000,时间戳为13位的话不需乘1000       var Y = date.getFullYear() + '-';
       var M = (date.getMonth()+1 < 10 ? '0'+(date.getMonth()+1) : date.getMonth()+1) + '-';
       var D = (date.getDate() < 10 ? '0'+date.getDate() : date.getDate()) + ' ';
       var h = (date.getHours() < 10 ? '0'+date.getHours() : date.getHours()) + ':';
       var m = (date.getMinutes() < 10 ? '0'+date.getMinutes() : date.getMinutes()) + ':';
       var s = (date.getSeconds() < 10 ? '0'+date.getSeconds() : date.getSeconds());
        return Y+M+D+h+m+s;
    }

    timestamptotime(1529111288);




发表评论 (已有0条评论)

快来评论,快来抢沙发吧~