当前位置:首页 > PHP教程 > php日期 > 列表

PHP获取时间戳等相关函数汇总

发布:smiling 来源: PHP粉丝网  添加日期:2023-10-06 16:56:42 浏览: 评论:0 

PHP是一种广泛使用的服务器端脚本语言,具有丰富的时间戳相关函数,本文介绍了PHP中获取时间戳的常用函数,包括time()、strtotime()、date()等,并提供了使用示例,同时,还介绍了PHP中其他与时间相关的函数,如mktime()、microtime()等。

一、时间戳和日期互相转换

  1. // 获取时间戳 
  2. $date = time(); // 获取当前时间戳 
  3. $date = mktime(0, 0, 0, 10, 10, 2020); // 获取指定时间的时间戳 2020年10月10日0时0分0秒 
  4.    
  5. // 日期转换为时间戳 
  6. $date = "2019-08-08 08:08:08"
  7. $timestamp = strtotime($date); 
  8.    
  9. // 将时间戳转换成日期 
  10. $date = time(); 
  11. echo date('Y-m-d'$date); // 输出格式化的日期(年-月-日) 
  12.    
  13. // 将时间戳转换为时间格式 
  14. $date = time(); 
  15. echo date('H:i:s'$date); // 输出格式化的时间(小时:分钟:秒) 
  16.    
  17. // 日期格式化 
  18. $date = time(); 
  19. echo date('Y-m-d H:i:s'$date); // 输出格式化的日期时间(年-月-日 小时:分钟:秒) 
  20.    
  21. // 将时间戳转换为星期 
  22. $date = time(); 
  23. echo date('l'$date); // 输出星期几的完整文本形式(例如:Sunday) 
  24.    
  25. // 将时间戳转换为月份 
  26. $date = time(); 
  27. echo date('F'$date); // 输出月份的完整文本形式(例如:January) 

二、PHP获取今日、昨日、上周、本周、上月、本月的起始时间戳

  1. //今日开始时间戳和结束时间戳 
  2. $beginToday=mktime(0,0,0,date('m'),date('d'),date('Y')); 
  3. $endToday=mktime(0,0,0,date('m'),date('d')+1,date('Y'))-1; 
  4.    
  5. //昨日起始时间戳和结束时间戳 
  6. $beginYesterday=mktime(0,0,0,date('m'),date('d')-1,date('Y')); 
  7. $endYesterday=mktime(0,0,0,date('m'),date('d'),date('Y'))-1; 
  8.    
  9. //本周起始时间戳和结束时间戳 
  10. $startTime = mktime(0,0,0,date('m'),date('d')-date('w')+1,date('y')); 
  11. $endTime = mktime(23,59,59,date('m'),date('d')-date('w')+7,date('y')); 
  12.    
  13. //上周起始时间戳和结束时间戳 
  14. $beginLastweek=mktime(0,0,0,date('m'),date('d')-date('w')+1-7,date('Y')); 
  15. $endLastweek=mktime(23,59,59,date('m'),date('d')-date('w')+7-7,date('Y')); 
  16.    
  17. //本月起始时间戳和结束时间戳 
  18. $beginThismonth=mktime(0,0,0,date('m'),1,date('Y')); 
  19. $endThismonth=mktime(23,59,59,date('m'),date('t'),date('Y')); 
  20.    
  21. //上月起始时间戳和结束时间戳 
  22. $begin_time = date('Y-m-01 00:00:00',strtotime('-1 month')); 
  23. $end_time = date("Y-m-d 23:59:59"strtotime(-date('d').'day')); 
  24.    
  25. //获取当前季度 
  26. $season = ceil((date('m'))/3); 
  27. //本季度起始时间戳和结束时间戳 
  28. $starTime=mktime(0, 0, 0,$season*3-3+1,1,date('Y')); 
  29. $endTime = mktime(23,59,59,$season*3,date('t',mktime(0, 0 , 0,$season*3,1,date("Y"))),date('Y')); 
  30.    
  31. //当年起始时间戳和结束时间戳 
  32. $startTime  = strtotime(date("Y",time())."-1"."-1");  
  33. $overTime  = strtotime(date("Y",time())."-12"."-31"); 

三、获取当前周的每天的起始时间

  1. function getDay(){ 
  2.     $timestr = time();    //当前时间戳 
  3.     $now_day = date('w',$timestr);  //当前是周几 
  4.    
  5.     //获取周一 
  6.     $monday_str = $timestr - ($now_day-1)*60*60*24; 
  7.     $monday = date('Y-m-d'$monday_str); 
  8.    
  9.     //获取周日 
  10.     $sunday_str = $timestr + (7-$now_day)*60*60*24; 
  11.     $sunday = date('Y-m-d'$sunday_str); 
  12.    
  13.     for($i=0;$i<7;$i++)   
  14.     {   
  15.         $arr[$i]['start']=strtotime(date('Y-m-d',strtotime($monday.'+'.$i.'day')));   
  16.         $arr[$i]['end']=strtotime(date('Y-m-d',strtotime($monday.'+'.$i.'day')). " 24:00:00");   
  17.     } 
  18.     return $arr;  

四、获取周的起始时间

1、根据指定时间获取所在周的起始时间和结束时间

  1. /** 
  2. * @param data 日期 
  3. */ 
  4. function get_weekinfo_by_time($date) { 
  5.     $idx = strftime("%u"strtotime($date)); 
  6.     $mon_idx = $idx - 1; 
  7.     $sun_idx = $idx - 7; 
  8.     return array
  9.       'week_start_day' => strftime('%Y-%m-%d'strtotime($date) - $mon_idx * 86400), 
  10.       'week_end_day' => strftime('%Y-%m-%d'strtotime($date) - $sun_idx * 86400), 
  11.       ); 

2、通过时间戳 获取某周的开始时间和结束时间

  1. /** 
  2. * @param time 时间 
  3. * @param first 表示每周星期一为开始日期 0表示每周日为开始日期 
  4. */ 
  5. function getWeekMyActionAndEnd($time = ''$first = 1) 
  6.   //当前日期 
  7.   if (!$time$time = time(); 
  8.   $sdefaultDate = date("Y-m-d"$time); 
  9.   //$first =1 表示每周星期一为开始日期 0表示每周日为开始日期 
  10.   //获取当前周的第几天 周日是 0 周一到周六是 1 - 6 
  11.   $w = date('w'strtotime($sdefaultDate)); 
  12.   //获取本周开始日期,如果$w是0,则表示周日,减去 6 天 
  13.   $week_start = date('Y-m-d'strtotime("$sdefaultDate -" . ($w ? $w - $first : 6) . ' days')); 
  14.   //本周结束日期 
  15.   $week_end = date('Y-m-d'strtotime("$week_start +6 days")); 
  16.   return array("week_start" => $week_start"week_end" => $week_end); 

五、获取指定日期是周几

  1. /** 
  2. * @param data 日期 
  3. */ 
  4. function DateToWeek($date){ 
  5.     //强制转换日期格式 
  6.     $date_str=date('Y-m-d',strtotime($date)); 
  7.    
  8.     //封装成数组 
  9.     $arr=explode("-"$date_str); 
  10.        
  11.     //参数赋值 
  12.     //年 
  13.     $year=$arr[0]; 
  14.        
  15.     //月,输出2位整型,不够2位右对齐 
  16.     $month=sprintf('%02d',$arr[1]); 
  17.        
  18.     //日,输出2位整型,不够2位右对齐 
  19.     $day=sprintf('%02d',$arr[2]); 
  20.        
  21.     //时分秒默认赋值为0; 
  22.     $hour = $minute = $second = 0;    
  23.        
  24.     //转换成时间戳 
  25.     $strap = mktime($hour,$minute,$second,$month,$day,$year); 
  26.        
  27.     //获取数字型星期几 
  28.     $number_wk=date("w",$strap); 
  29.        
  30.     //自定义星期数组 
  31.     $weekArr=array("周日","周一","周二","周三","周四","周五","周六"); 
  32.        
  33.     //获取数字对应的星期 
  34.     return $weekArr[$number_wk]; 

六、通过某个日期段内的周几获取对应的日期  开始日期 结束日期

  1. /** 
  2. * @param data 日期 array(start_date,end_data) 
  3. */ 
  4. function getDateByWeek($data
  5.     $start_date = strtotime($data['start_date']); 
  6.     $end_date = strtotime($data['end_date']); 
  7.     $days = ($end_date - $start_date) / 86400; 
  8.     $weekArr = array('周日','周一','周二','周三','周四','周五','周六'); 
  9.     $newDate = array(); 
  10.     // 组建数组格式 $dataWeek['日期'] => 星期 
  11.     for ($i=0; $i < $days$i++) {  
  12.         $num_week = date('w',$start_date+($i*86400)); 
  13.         $dateWeek[date('Y-m-d',$start_date+($i*86400))] = $weekArr[$num_week]; 
  14.     } 
  15.     // 查找两个数组的交集,即获取提交的星期对应的日期 
  16.     $newDate=array_intersect($dateWeek,$data['items']); 
  17.     // 获取数组中的键值(日期),并组成一个新数组 
  18.     $date = array_keys($newDate); 
  19.     return $date

七、获取指定日期之间的各个周

  1. /** 
  2. * @param sdate 开始日期 
  3. * @param edate 结束日期 
  4. */ 
  5. function get_weeks($sdate$edate) { 
  6.     $range_arr = array(); 
  7.     // 检查日期有效性 
  8.     check_date(array($sdate$edate)); 
  9.     // 计算各个周的起始时间 
  10.     do { 
  11.       $weekinfo = get_weekinfo_by_date($sdate); 
  12.       $end_day = $weekinfo['week_end_day']; 
  13.        $start = substr_date($weekinfo['week_start_day']); 
  14.       $end = substr_date($weekinfo['week_end_day']); 
  15.       $range = "{$start} ~ {$end}"
  16.       $range_arr[] = $range
  17.        $sdate = date('Y-m-d'strtotime($sdate)+7*86400); 
  18.     }while($end_day < $edate); 
  19.     return $range_arr
  20.    
  21. /** 
  22.   * 检查日期的有效性 YYYY-mm-dd 
  23.   * @param array $date_arr 
  24.   * @return boolean 
  25.   */ 
  26. function check_date($date_arr) { 
  27.     $invalid_date_arr = array(); 
  28.     foreach ($date_arr as $row) { 
  29.       $timestamp = strtotime($row); 
  30.       $standard = date('Y-m-d'$timestamp); 
  31.       if ($standard != $row$invalid_date_arr[] = $row
  32.     } 
  33.     if ( ! emptyempty($invalid_date_arr)) { 
  34.       die("invalid date -> ".print_r($invalid_date_arr, TRUE)); 
  35.     } 
  36. }  
  37.    
  38. /** 
  39.    * 截取日期中的月份和日 
  40.    * @param string $date 
  41.    * @return string $date 
  42.    */ 
  43.    function substr_date($date) { 
  44.     if ( ! $datereturn FALSE; 
  45.     return date('m-d'strtotime($date)); 
  46.   } 
  47.    
  48. /** 
  49.    * 根据指定日期获取所在周的起始时间和结束时间 
  50.    */ 
  51.    function get_weekinfo_by_date($date) { 
  52.     $idx = strftime("%u"strtotime($date)); 
  53.     $mon_idx = $idx - 1; 
  54.     $sun_idx = $idx - 7; 
  55.     return array
  56.       'week_start_day' => strftime('%Y-%m-%d'strtotime($date) - $mon_idx * 86400), 
  57.       'week_end_day' => strftime('%Y-%m-%d'strtotime($date) - $sun_idx * 86400), 
  58.       ); 
  59.   } 

八、获取指定日期之间的各个月

  1. /** 
  2. * @param sdate 开始日期 
  3. * @param edate 结束日期 
  4. */ 
  5. function get_months($sdate$edate) { 
  6.     $range_arr = array(); 
  7.     do { 
  8.       $monthinfo = get_monthinfo_by_date($sdate); 
  9.       $end_day = $monthinfo['month_end_day']; 
  10.        $start = substr_date($monthinfo['month_start_day']); 
  11.       $end = substr_date($monthinfo['month_end_day']); 
  12.       $range = "{$start} ~ {$end}"
  13.       $range_arr[] = $range
  14.        $sdate = date('Y-m-d'strtotime($sdate.'+1 month')); 
  15.     }while($end_day < $edate); 
  16.     return $range_arr
  17.   } 
  18.    
  19. /** 
  20.    * 截取日期中的月份和日 
  21.    * @param string $date 
  22.    * @return string $date 
  23.    */ 
  24.    function substr_date($date) { 
  25.     if ( ! $datereturn FALSE; 
  26.     return date('m-d'strtotime($date)); 
  27.   } 
  28.    
  29. /** 
  30.    * 根据指定日期获取所在月的起始时间和结束时间 
  31.    */ 
  32.    function get_monthinfo_by_date($date){ 
  33.     $ret = array(); 
  34.     $timestamp = strtotime($date); 
  35.     $mdays = date('t'$timestamp); 
  36.     return array
  37.       'month_start_day' => date('Y-m-1'$timestamp), 
  38.       'month_end_day' => date('Y-m-'.$mdays$timestamp
  39.       ); 
  40.   } 

九、根据指定日期获取所在月的起始时间和结束时间

  1. /** 
  2. * @param date 日期 
  3. */ 
  4. function get_monthinfo_by_date($date){ 
  5.     $ret = array(); 
  6.     $timestamp = strtotime($date); 
  7.     $mdays = date('t'$timestamp); 
  8.     return array
  9.       'month_start_day' => date('Y-m-1'$timestamp), 
  10.       'month_end_day' => date('Y-m-'.$mdays$timestamp
  11.       ); 

十、获取指定年份的每个月的起始时间

  1. /** 
  2. * @param year 年份 
  3. */ 
  4. function getMonthByDate($year
  5.     // $year = '2019'; 
  6.     $yeararr = []; 
  7.     $month = []; 
  8.     for ($i=1; $i <=12 ; $i++) {  
  9.         $yeararr[$i] = $year.'-'.$i
  10.     } 
  11.     foreach ($yeararr as $key => $value) { 
  12.         $timestamp = strtotime($value ); 
  13.         $start_time = date'Y-m-1 00:00:00'$timestamp ); 
  14.         $mdays = date't'$timestamp ); 
  15.         $end_time = date'Y-m-' . $mdays . ' 23:59:59'$timestamp ); 
  16.         $month[$key]['start_time'] = strtotime($start_time); 
  17.         $month[$key]['end_time'] = strtotime($end_time); 
  18.     } 
  19.     return $month

十一、获取指定月份的起止时间戳

  1. /** 
  2. * 获取指定月份的时间戳 
  3. * @param $date Y-m 
  4. */ 
  5. function get_month_begin_end($date){ 
  6.     // $date = '2018-11'; 
  7.     $data['begin_time'] = strtotime($date);  //指定月份月初时间戳   
  8.     $data['end_time'] = mktime(23,59,59,date('m',strtotime($date))+1,00);   //指定月份月末时间戳 
  9.     return $data

PHP中的时间戳相关函数非常丰富,可以满足开发者在处理时间相关问题时的各种需求。其中,time()函数可以获取当前时间戳,strtotime()函数可以将字符串转换为时间戳,date()函数可以将时间戳格式化为指定的日期格式。

除此之外,还有mktime()函数可以根据指定的时间参数获取时间戳,microtime()函数可以获取当前时间的微秒数等。掌握这些函数可以帮助开发者更加高效地处理时间相关的问题,提高开发效率。

Tags: PHP获取时间戳

分享到: