PHP函数篇(一)---日期/时间函数篇(2)

219 阅读4分钟

本文已参与【新人创作礼】活动 ,一起开启掘金创作之路

# 1、getdate() 函数

定义和用法

getdate() 函数返回某个时间戳或者当前本地的日期/时间的日期/时间信息。

语法

getdate(timestamp);

参数描述
timestamp可选。规定整数的 Unix 时间戳。默认为当前本地时间(time()
返回值:返回带有与时间戳相关的信息的关联数组:
-[seconds] - 秒
-[minutes] - 分
-[hours] - 小时
-[mday] - 一个月中的第几天
-[wday] - 一周中的某天
-[mon] - 月
-[year] - 年
-[yday] - 一年中的某天
-[weekday] - 星期几的名称
-[month] - 月份的名称
-[0] - 自 Unix 纪元以来经过的秒数

$now = time();

var_dump($now);         # 输出 1652789456
 
var_dump(getdate());

var_dump(getdate()[0]); # 输出 1652789456


输出

array:11 [▼
  "seconds" => 56
  "minutes" => 10
  "hours"   => 12
  "mday"    => 17
  "wday"    => 2
  "mon"     => 5
  "year"    => 2022
  "yday"    => 136
  "weekday" => "Tuesday"
  "month"   => "May"
  0         => 1652789456
]

# 2、date() 函数

date() 函数可把时间戳格式化为可读性更好的日期和时间。

语法

string date ( string format[,intformat [, int timestamp ] )

参数描述
format必需。规定时间戳的格式。
timestamp可选。规定时间戳。默认是当前的日期和时间。

时间格式化的方式

格式化方式说明
Y4位数字年,y为2位数字,如99即1999年
m数字月份,前面有前导0,如01。n 为无前导0数字月份
F月份,完整的文本格式,例如 January 或者 March
M三个字母缩写表示的月份,例如 Jan 或者 Mar
d月份中的第几天,前面有前导0,如03。j 为无前导0的天数
w星期中的第几天,以数字表示,0表示星期天
z年份中的第几天,范围0-366
W年份中的第几周,如第32周
H24小时格式,有前导0,h为12小时格式
G24小时格式,无前导0,g为对应12小时格式
i分钟格式,有前导0
s秒格式,有前导0
A大写上下午,如AM,a为小写

PHP Date() - 格式化日期

    
    date_default_timezone_set('Asia/Shanghai');//设置时区

    var_dump(date("Y-m-d",time()));       # 输出 显示格式如 string '2022-05-17' (length=10)

    var_dump(date("Y.m.d",time()));       # 输出 显示格式如 string '2022.05.17' (length=10)

    var_dump(date("M d Y",time()));       # 输出 显示格式如 'May 17 2022' (length=11)

    var_dump(date("Y-m-d H:i",time()));   # 输出 显示格式如 '2022-05-17 20:55' (length=16)
    
    var_dump(date("Y-m-d H:i:s "));
    # string(20) "2022-05-22 06:21:37" 中文常用时间格式
    
    var_dump(date("y-M-D h:i:S "));
    # string(20) "22-May-Sun 06:21:nd" 英文常用时间格式
    
    var_dump(date("F"));
    # string(3) "May" 月份,英文全称
    
    var_dump(date("m"));
    # string(2) "05" 数字月份 不够两位 前面会自动补零
     
    var_dump(date("n"));
    # string(1) "5"  数字月份 不够两位 前面不会补零
      
    var_dump(date("M"));
    # string(3) "May" 月份,前三个英文字母
   
    var_dump(date("l"));
    #  string(6) "Sunday"  星期几,英文全称

    var_dump(date("D"));
    # string(3) "Sun"      星期几,三个英文字母
 
    var_dump(date("w"));
    # string(1) "0"  w - 数字型的星期几,如: "0" (星期日) 至 "6" (星期六)
    

# 3、microtime() 函数

定义 microtime()返回当前 Unix 时间戳和微秒数。

# PHP获取秒、毫秒和微秒的换算关系

1秒(second) = 1000毫秒(millisecond) = 1000,000微秒(microsecond)

函数形式返回值
microtime()   返回字符串 函数返回当前 Unix的微秒数。
microtime(true) 返回浮点数,表示微秒的时间戳形式
    date_default_timezone_set('Asia/Shanghai'); #设置时区

    var_dump(microtime());     # string(21) "0.70860300 1653173824"
    
    var_dump(microtime(true)); # float(1653173868.4224)
    
    # 函数microtime()通常用法

    $mtime = explode(' ',microtime());

    $startTime = $mtime[1]+$mtime[0];

    var_dump($startTime); # float(1653174485.6806)
    
    # 日常项目开发实例
    /**
     * 日期时间友好显示
     * @param $time
     * @return bool|string
     */
    <?php
 /**
     * 日期时间友好显示
     * @param $time
     * @return bool|string
     */
    function friendly_date($time)
    {
        if (!$time) {
            return false;
        }
        $fdate = '';
        $diff  = time() - intval($time);
        $year  = $time - mktime(0, 0, 0, 0, 0, date('Y')); //年
        $month = $time - mktime(0, 0, 0, date('m'), 0, date('Y')); //月
        $beforeyesterday  = $time - mktime(0, 0, 0, date('m'), date('d') - 2, date('Y')); //前天
        $yesterday        = $time - mktime(0, 0, 0, date('m'), date('d') - 1, date('Y')); //昨天
        $today            = $time - mktime(0, 0, 0, date('m'), date('d'), date('Y')); //今天
        $tomorrow         = $time - mktime(0, 0, 0, date('m'), date('d') + 1, date('Y')); //明天
        $aftertomorrow    = $time - mktime(0, 0, 0, date('m'), date('d') + 2, date('Y')); //后天
        if ($diff == 0) {
            $fdate = '刚刚';
        } else {
            switch ($diff) {
                case $diff < $aftertomorrow:
                    $fdate = date('Y年m月d日', $time);
                    break;
                case $diff < $tomorrow:
                    $fdate = '后天' . date('H:i', $time);
                    break;
                case $diff < 0:
                    $fdate = '明天' . date('H:i', $time);
                    break;
                case $diff < 60:
                    $fdate = $diff . '秒前';
                    break;
                case $diff < 3600:
                    $fdate = floor($diff / 60) . '分钟前';
                    break;
                case $diff < $today:
                    $fdate = floor($diff / 3600) . '小时前';
                    break;
                case $diff < $yesterday:
                    $fdate = '昨天' . date('H:i', $time);
                    break;
                case $diff < $beforeyesterday:
                    $fdate = '前天' . date('H:i', $time);
                    break;
                case $diff < $month:
                    $fdate = date('m月d日 H:i', $time);
                    break;
                case $diff < $year:
                    $fdate = date('m月d日', $time);
                    break;
                default:
                    $fdate = date('Y年m月d日', $time);
                    break;
            }
        }
        return $fdate;
    }
    
    var_dump(friendly_date(time()));
    # string(6) "刚刚"

    var_dump(friendly_date(strtotime('2022-05-20 15:30:30')));
    # string(11) "前天15:30"
    
    var_dump(friendly_date(strtotime('2022-05-23 15:30:30')));
    # string(17) "2022年05月23日"