PHP日期时间处理

PHP中对日期进行操作的几个常用函数如下:

  • date(): 把时间戳格式化为更易读的日期和时间
  • time(): 获取当前 Unix 时间戳
  • strtotime(): 将表示时间和日期的字符串转化为相应的时间戳

date() 函数介绍


data() 函数的语法如下:

string date ( string $format [, int $timestamp ] )
  • format : 必需,规定输出日期字符串的格式
  • timestamp : 可选,规定整数的 Unix 时间戳。默认是当前的本地时间 time()
  • 返回值是格式化后的时间字符串
// 假定今天是:2019年1月21日
$today = date("Y-m-d H:i:s");                   // 2019-01-21 18:52:18 (MySQL DATETIME 格式)
$today = date("F j, Y, g:i a");                 // Jan 21, 2019, 6:52 pm

strtotime() 函数介绍


strtotime() 函数语法如下:

int strtotime ( string $time [, int $now = time() ] )
  • time : 日期/时间字符串
  • now : 用来计算返回值的时间戳
  • 本函数预期接受一个包含美国英语日期格式的字符串并尝试将其解析为 Unix 时间戳,其值相对于 now 参数给出的时间,如果没有提供此参数则用系统当前时间
  • 成功则返回时间戳,否则返回 FALSE,在 PHP 5.1.0 之前本函数在失败时返回 -1
echo strtotime("now"), "\n";  // 现在时间戳
echo strtotime("21 January 2019"), "\n"; // 2019年1月21日时间戳
echo strtotime("+1 day"), "\n";  // 距离现在一天后的时间戳
echo strtotime("+10 year", 1616486754); // 获取某个日期十年后的时间

time() 函数介绍


time() 获取当前Unix秒数时间戳,还可以使用 microtime() 获取当前 Unix 时间戳和微秒数,这个函数经常用来计算脚本运行的耗时

mixed microtime ([ bool $get_as_float ] )

如果调用时不带可选参数,本函数以 "msec sec" 的格式返回一个字符串,其中 sec 是自 Unix 纪元(0:00:00 January 1, 1970 GMT)起到现在的秒数,msec 是微秒部分。字符串的两部分都是以秒为单位返回的。

时间戳和时间字符串其他操作


使用 time() 函数,会获取当前时间的 Unix 时间戳,是一个10位的整数,表示自 Unix 纪元(1月1日 1970 00:00:00 GMT)起的当前时间的秒数。
使用 strtotime() 函数,可以将任何英文文本的日期或时间描述解析为 Unix 时间戳。失败则返回 FALSE。应该尽可能使用 YYYY-MM-DD 格式或者使用
使用 date() 函数,可以将时间戳按照指定的格式格式化为时间字符串

使用方法:

$time = time(); // 当前时间戳
var_dump($time);  // int(1548068931)

$time_str = date('Y-m-d H:i:s', $time); // 将时间戳转化为相应的时间字符串
var_dump($time_str);  // string(19) "2019-01-21 19:08:51"

$time_int = strtotime($time_str);  // 将时间字符串转化为时间戳
var_dump($time_int); // int(1548068931)

获取那种基于某个时间一定时间段的时间的做法,可以使用 strtotime(),也可以 time() 获取当前时间然后加上或减去指定时间距离现在的偏移秒数。

  • 获取前一天的时间戳:strtotime('-1 day') 或者 time() - 3600 * 24
  • 获取今天凌晨0点的时间戳:strtotime(date("Y-m-d"), time())
  • 获取今天某个时刻如6点半的时间戳: strtotime(data('Y-m-d')) + 6 * 3600 + 30 * 60

友好时间显示:

if (!function_exists('word_time')) {
    /**
     * [word_time 传入时间戳,计算距离现在的时间]
     * @param  [type] $time [时间戳]
     * @return [type]       [返回计算出的时间]
     */
    function word_time($time) {
        $time = (int) substr($time, 0, 10);
        $int = time() - $time;
        $str = '';
        if ($int <= 3600*24*7){
            $str = '一周内';
        }elseif ($int < 3600*24*30){
            $str = '一月内';
        }else{
            $str = '一月前';
        }
        return $str;
    }
}

获取当前月月初月末时间戳

$startTime = date('Y-m-01', $time); // 月初
$endTime = date('Y-m-') . date('t', $time); // 月末
<?php
$thisyear = date('Y');
$thismonth = date('m');
$startDay = $thisyear . '-' . $thismonth . '-01';
$endDay = $thisyear . '-' . $thismonth . '-' . date('t', strtotime($startDay));
$b_time  = strtotime($startDay); // 当前月的月初时间戳
$e_time  = strtotime($endDay); // 当前月的月末时间戳
$startTime = date('Y-m-01', strtotime('-1 month', $time)); // 上个月月初
$endTime = date('Y-m-', strtotime('+1 month', $time)) . date('t', strtotime('+1 month', $time)); // 下个月月末

友好时间可以根据自己需求进行修改,也可根据时间获取一些其他信息,如星座等

冯奎博客
请先登录后发表评论
  • latest comments
  • 总共0条评论