本篇文章你将清晰深刻了解时间在程序中的应用及相关问题,本来想分开写,索性就全部都放到一起讲吧。
在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);
快来评论,快来抢沙发吧~