PHP 各种时间处理

时间参数详解

  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"

实例代码

 1 <?php
 2 $timetype = isset($request['timetype']) ? (int)$request['timetype'] : 3;//选择时间 1:今天 2:本周 3:本月 4:全年 
 3 switch ($timetype) { 
 4   case 1://【今天】的开始和结束时间戳 
 5     $begintime = mktime(0, 0, 0, date('m'), date('d'), date('Y')); 
 6     $endtime = mktime(23, 59, 59, date('m'), date('d'), date('Y')); 
 7     //方法2 
 8     //$begintime = strtotime(date('Y-m-d 00:00:00')); 
 9     //$endtime = strtotime(date('Y-m-d 23:59:59')); 
10     break; 
11   case 2://【本周】的开始和结束时间戳 
12     $begintime = mktime(0, 0, 0, date("m"), date("d") - date("w") + 1, date("Y")); 
13     $endtime = mktime(23, 59, 59, date("m"), date("d") - date("w") + 7, date("Y")); 
14     break; 
15   case 3://【本月】的开始和结束时间戳 
16     $begintime = mktime(0, 0, 0, date('m'), 1, date('Y')); 
17     $endtime = mktime(23, 59, 59, date('m'), date('t'), date('Y')); 
18     break; 
19   case 4://【全年】的开始和结束时间戳 
20     $begintime = mktime(0, 0, 0, 1, 1, date("Y")); 
21     $endtime = mktime(23, 59, 59, 12, 31, date("Y")); 
      break; 22   } 23 ?>

指定某个月的开始和结束时间戳

1 <?php
2 $dateline = strtotime($date); // $date如:2019-10
3 $firstdaystr = strtotime(date("Y-m-01", $dateline));
4 $lastdaystr = strtotime(date('Y-m-d 23:59:59', strtotime("$date +1 month -1 day")));
5 ?>

大月小月问题

1 <?php
2 $date = date('Y-m-d',strtotime('last day of -1 month',strtotime('2018-07-31')));//(加上last day of)结果为 2018-06-30 否则 2018-07-01 
3 $date = date('Y-m-d',strtotime('first day of -1 month',strtotime('2018-07-31')));//(加上first day of)结果为 2018-06-01 否则 2018-07-01 
4 $date = date('Y-m-d',strtotime('last day of +1 month',strtotime('2018-08-31')));//(加上last day of)结果为 2018-09-30 否则 2018-10-01
5 
6 ?>

指定日期语言

语言代码参考

1 1 <?php
2 2 setlocale(LC_TIME, 'it');//切换到意大利 
3 echo utf8_encode( strftime("%a %d %b %Y", $dateline) );//传入时间戳 
4 setlocale(LC_TIME, NULL);重置到当前系统默认地区
5 3 ?>

时区设置

<?php
//方法1、通过时区

date_default_timezone_set("UTC/GMT-8");//这是格林威治标准时间,得到的时间和默认时区是一样的
date_default_timezone_set("Etc/GMT+8");//这里比格林威治标准时间慢8小时
date_default_timezone_set("Etc/GMT-8");//这里比格林威治标准时间快8小时

//方法2、通过区域 区域列表:https://www.php.net/manual/zh/timezones.php
date_default_timezone_set('America/New_York');

?>

生成某月的日期列表

<?php
/**
     * @description 生成某个月的所有日期
     * @param $date 某个月2020-3
     * @return array
     */
      function get_month_day($date){
       
        $dateline = strtotime($date);
        $now_date = date('Y-m-d');//当前日期

        $new_now_month = date('Y-n',strtotime($now_date));
        //如果是当前月,仅显示已经过的日期
        if($date == $new_now_month){
            $j = date('j');
        }else{
            $j = date("t",$dateline);
        }
        //获取指定月第一天时间戳
        $start_time = strtotime(date('Y-m-01',$dateline));
        $array = array();
        for($i=0;$i<$j;$i++){
            $array[] = date('Y-m-d',$start_time+$i*86400);
        }
        return $array;
    }

?>
原文地址:https://www.cnblogs.com/guliang/p/11730721.html