翼度科技»论坛 编程开发 PHP 查看内容

PHP获取时间戳、获取天周月的起始时间、指定时间所在周、指定时间的各个周

4

主题

4

帖子

12

积分

新手上路

Rank: 1

积分
12
一、时间戳和日期互相转换
  1. // 获取时间戳
  2. $date = time(); // 获取当前时间戳
  3. $date = mktime(0, 0, 0, 10, 10, 2020); // 获取指定时间的时间戳 2020年10月10日0时0分0秒
  4. // 日期转换为时间戳
  5. $date = "2019-08-08 08:08:08";
  6. $timestamp = strtotime($date);
  7. // 将时间戳转换成日期
  8. $date = time();
  9. echo date('Y-m-d', $date); // 输出格式化的日期(年-月-日)
  10. // 将时间戳转换为时间格式
  11. $date = time();
  12. echo date('H:i:s', $date); // 输出格式化的时间(小时:分钟:秒)
  13. // 日期格式化
  14. $date = time();
  15. echo date('Y-m-d H:i:s', $date); // 输出格式化的日期时间(年-月-日 小时:分钟:秒)
  16. // 将时间戳转换为星期
  17. $date = time();
  18. echo date('l', $date); // 输出星期几的完整文本形式(例如:Sunday)
  19. // 将时间戳转换为月份
  20. $date = time();
  21. 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. $beginYesterday=mktime(0,0,0,date('m'),date('d')-1,date('Y'));
  6. $endYesterday=mktime(0,0,0,date('m'),date('d'),date('Y'))-1;
  7. //本周起始时间戳和结束时间戳
  8. $startTime = mktime(0,0,0,date('m'),date('d')-date('w')+1,date('y'));
  9. $endTime = mktime(23,59,59,date('m'),date('d')-date('w')+7,date('y'));
  10. //上周起始时间戳和结束时间戳
  11. $beginLastweek=mktime(0,0,0,date('m'),date('d')-date('w')+1-7,date('Y'));
  12. $endLastweek=mktime(23,59,59,date('m'),date('d')-date('w')+7-7,date('Y'));
  13. //本月起始时间戳和结束时间戳
  14. $beginThismonth=mktime(0,0,0,date('m'),1,date('Y'));
  15. $endThismonth=mktime(23,59,59,date('m'),date('t'),date('Y'));
  16. //上月起始时间戳和结束时间戳
  17. $begin_time = date('Y-m-01 00:00:00',strtotime('-1 month'));
  18. $end_time = date("Y-m-d 23:59:59", strtotime(-date('d').'day'));
  19. //获取当前季度
  20. $season = ceil((date('m'))/3);
  21. //本季度起始时间戳和结束时间戳
  22. $starTime=mktime(0, 0, 0,$season*3-3+1,1,date('Y'));
  23. $endTime = mktime(23,59,59,$season*3,date('t',mktime(0, 0 , 0,$season*3,1,date("Y"))),date('Y'));
  24. //当年起始时间戳和结束时间戳
  25. $startTime  = strtotime(date("Y",time())."-1"."-1");
  26. $overTime  = strtotime(date("Y",time())."-12"."-31");  
复制代码
三、获取当前周的每天的起始时间
  1. function getDay(){
  2.     $timestr = time();    //当前时间戳
  3.     $now_day = date('w',$timestr);  //当前是周几
  4.     //获取周一
  5.     $monday_str = $timestr - ($now_day-1)*60*60*24;
  6.     $monday = date('Y-m-d', $monday_str);
  7.     //获取周日
  8.     $sunday_str = $timestr + (7-$now_day)*60*60*24;
  9.     $sunday = date('Y-m-d', $sunday_str);
  10.     for($i=0;$i<7;$i++)  
  11.     {  
  12.         $arr[$i]['start']=strtotime(date('Y-m-d',strtotime($monday.'+'.$i.'day')));  
  13.         $arr[$i]['end']=strtotime(date('Y-m-d',strtotime($monday.'+'.$i.'day')). " 24:00:00");  
  14.     }
  15.     return $arr;
  16. }
复制代码
2、通过时间戳 获取某周的开始时间和结束时间 
  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.       );
  12. }
复制代码
五、获取指定日期是周几
  1. /**
  2. * @param time 时间
  3. * @param first 表示每周星期一为开始日期 0表示每周日为开始日期
  4. */
  5. function getWeekMyActionAndEnd($time = '', $first = 1)
  6. {
  7.   //当前日期
  8.   if (!$time) $time = time();
  9.   $sdefaultDate = date("Y-m-d", $time);
  10.   //$first =1 表示每周星期一为开始日期 0表示每周日为开始日期
  11.   //获取当前周的第几天 周日是 0 周一到周六是 1 - 6
  12.   $w = date('w', strtotime($sdefaultDate));
  13.   //获取本周开始日期,如果$w是0,则表示周日,减去 6 天
  14.   $week_start = date('Y-m-d', strtotime("$sdefaultDate -" . ($w ? $w - $first : 6) . ' days'));
  15.   //本周结束日期
  16.   $week_end = date('Y-m-d', strtotime("$week_start +6 days"));
  17.   return array("week_start" => $week_start, "week_end" => $week_end);
  18. }
复制代码
六、通过某个日期段内的周几获取对应的日期  开始日期 结束日期 
  1. /**
  2. * @param data 日期
  3. */
  4. function DateToWeek($date){
  5.     //强制转换日期格式
  6.     $date_str=date('Y-m-d',strtotime($date));
  7.     //封装成数组
  8.     $arr=explode("-", $date_str);
  9.      
  10.     //参数赋值
  11.     //年
  12.     $year=$arr[0];
  13.      
  14.     //月,输出2位整型,不够2位右对齐
  15.     $month=sprintf('%02d',$arr[1]);
  16.      
  17.     //日,输出2位整型,不够2位右对齐
  18.     $day=sprintf('%02d',$arr[2]);
  19.      
  20.     //时分秒默认赋值为0;
  21.     $hour = $minute = $second = 0;   
  22.      
  23.     //转换成时间戳
  24.     $strap = mktime($hour,$minute,$second,$month,$day,$year);
  25.      
  26.     //获取数字型星期几
  27.     $number_wk=date("w",$strap);
  28.      
  29.     //自定义星期数组
  30.     $weekArr=array("周日","周一","周二","周三","周四","周五","周六");
  31.      
  32.     //获取数字对应的星期
  33.     return $weekArr[$number_wk];
  34. }
复制代码
七、获取指定日期之间的各个周
  1. /**
  2. * @param data 日期 array(start_date,end_data)
  3. */
  4. function getDateByWeek($data)
  5. {
  6.     $start_date = strtotime($data['start_date']);
  7.     $end_date = strtotime($data['end_date']);
  8.     $days = ($end_date - $start_date) / 86400;
  9.     $weekArr = array('周日','周一','周二','周三','周四','周五','周六');
  10.     $newDate = array();
  11.     // 组建数组格式 $dataWeek['日期'] => 星期
  12.     for ($i=0; $i < $days; $i++) {
  13.         $num_week = date('w',$start_date+($i*86400));
  14.         $dateWeek[date('Y-m-d',$start_date+($i*86400))] = $weekArr[$num_week];
  15.     }
  16.     // 查找两个数组的交集,即获取提交的星期对应的日期
  17.     $newDate=array_intersect($dateWeek,$data['items']);
  18.     // 获取数组中的键值(日期),并组成一个新数组
  19.     $date = array_keys($newDate);
  20.     return $date;
  21. }
复制代码
八、获取指定日期之间的各个月
  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 ( ! empty($invalid_date_arr)) {
  34.       die("invalid date -> ".print_r($invalid_date_arr, TRUE));
  35.     }
  36. }
  37. /**
  38.    * 截取日期中的月份和日
  39.    * @param string $date
  40.    * @return string $date
  41.    */
  42.    function substr_date($date) {
  43.     if ( ! $date) return FALSE;
  44.     return date('m-d', strtotime($date));
  45.   }
  46. /**
  47.    * 根据指定日期获取所在周的起始时间和结束时间
  48.    */
  49.    function get_weekinfo_by_date($date) {
  50.     $idx = strftime("%u", strtotime($date));
  51.     $mon_idx = $idx - 1;
  52.     $sun_idx = $idx - 7;
  53.     return array(
  54.       'week_start_day' => strftime('%Y-%m-%d', strtotime($date) - $mon_idx * 86400),
  55.       'week_end_day' => strftime('%Y-%m-%d', strtotime($date) - $sun_idx * 86400),
  56.       );
  57.   }
复制代码
九、根据指定日期获取所在月的起始时间和结束时间
  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.    * @param string $date
  21.    * @return string $date
  22.    */
  23.    function substr_date($date) {
  24.     if ( ! $date) return FALSE;
  25.     return date('m-d', strtotime($date));
  26.   }
  27. /**
  28.    * 根据指定日期获取所在月的起始时间和结束时间
  29.    */
  30.    function get_monthinfo_by_date($date){
  31.     $ret = array();
  32.     $timestamp = strtotime($date);
  33.     $mdays = date('t', $timestamp);
  34.     return array(
  35.       'month_start_day' => date('Y-m-1', $timestamp),
  36.       'month_end_day' => date('Y-m-'.$mdays, $timestamp)
  37.       );
  38.   }
复制代码
十、获取指定年份的每个月的起始时间
  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.       );
  12. }
复制代码
 十一、获取指定月份的起止时间戳
  1. /**
  2. * @param year 年份
  3. */
  4. function getMonthByDate($year)
  5. {
  6.     // $year = '2019';
  7.     $yeararr = [];
  8.     $month = [];
  9.     for ($i=1; $i <=12 ; $i++) {
  10.         $yeararr[$i] = $year.'-'.$i;
  11.     }
  12.     foreach ($yeararr as $key => $value) {
  13.         $timestamp = strtotime($value );
  14.         $start_time = date( 'Y-m-1 00:00:00', $timestamp );
  15.         $mdays = date( 't', $timestamp );
  16.         $end_time = date( 'Y-m-' . $mdays . ' 23:59:59', $timestamp );
  17.         $month[$key]['start_time'] = strtotime($start_time);
  18.         $month[$key]['end_time'] = strtotime($end_time);
  19.     }
  20.     return $month;
  21. }
复制代码
 

来源:https://www.cnblogs.com/zxf100/p/17370168.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

举报 回复 使用道具