PHP手册整理 - 日期和时间

time 函数:

// 返回自从 Unix 纪元(格林威治时间 1970 年 1 月 1 日 00:00:00)到当前时间的秒数
echo time();

// 发起该请求时刻的时间戳
echo $_SERVER['REQUEST_TIME'];

DateTime 工具类:

/**
 * 粗略计算时间的差异
 *
 * @param $date
 *
 * @return string
 */
function getTimeInterval($date)
{
    try {
        $date = new DateTime ($date);
        $now = new DateTime (date('Y-m-d H:i:s', time()));

        if ($now >= $date) {
            $time_diff = date_diff($date, $now);
            $tense = "前";
        } else {
            $time_diff = date_diff($now, $date);
            $tense = "后";
        }

        $period = [" 秒", " 分钟", " 小时", " 天", " 月", " 年"];
        $period_value = [
            $time_diff->format('%s'), // 差异的秒数
            $time_diff->format('%i'), // 差异的分钟数
            $time_diff->format('%h'), // 差异的小时数
            $time_diff->format('%d'), // 差异的天数
            $time_diff->format('%m'), // 差异的月数
            $time_diff->format('%y'), // 差异的年数
        ];

        for ($i = 0; $i < count($period_value); $i++) {
            if ($period_value[$i] > 0) {
                $interval = $period_value[$i] . $period[$i] . $tense;
            }
        }

        if (isset($interval)) {
            return $interval;
        } else {
            return "0 秒" . $tense;
        }
    } catch (Exception $ex) {
        return $ex->getMessage();
    }
}

echo getTimeInterval("2020-11-24 12:00:00"); // 2 天前
echo getTimeInterval("2020-11-28 12:00:00"); // 23 小时后

strtotime 函数:

// strtotime - 将任何字符串的日期时间描述解析为 Unix 时间戳

// 2020-12-04 19:41:58 当前系统时间
echo date('Y-m-d H:i:s', strtotime("now")), "\n";

// 2000-09-10 00:00:00 2020年9月10号
echo date('Y-m-d H:i:s', strtotime("10 September 2000")), "\n"; 

// 2020-12-05 19:41:58 当前系统时间加一天
echo date('Y-m-d H:i:s', strtotime("+1 day")), "\n";   

// 2020-12-11 19:41:58 当前系统时间加一周         
echo date('Y-m-d H:i:s', strtotime("+1 week")), "\n"; 

// 2020-12-13 23:42:00 当前系统时间加1周2天4小时2秒          
echo date('Y-m-d H:i:s', strtotime("+1 week 2 days 4 hours 2 seconds")), "\n"; 

// 2020-12-10 00:00:00 下周四
echo date('Y-m-d H:i:s', strtotime("next Thursday")), "\n";   

// 2020-11-30 00:00:00 上周一  
echo date('Y-m-d H:i:s', strtotime("last Monday")), "\n";       

getdate 函数:

// 取得日期/时间信息
$dates = getdate();
print_r($dates);

/**
 * Array
 * (
 * 		[seconds] => 19        秒
 *   	[minutes] => 51        分
 * 		[hours] => 19          时
 *   	[mday] => 4            月份中第几天
 *    	[wday] => 5            星期中第几天
 *     	[mon] => 12            月份
 *      [year] => 2020         年份
 *      [yday] => 338          一年中第几天
 *      [weekday] => Friday    星期几
 *      [month] => December    月份的完整文本
 *      [0] => 1607082679      当前系统时间戳    
 * )
 */

date 函数:

/* date — 格式化一个本地时间/日期
-------- 日 ------- 
d 月份中的第几天,有前导零的 2 位数字 01 到 31 
D 星期中的第几天,文本表示,3 个字母 Mon 到 Sun 
j 月份中的第几天,没有前导零 1 到 31 
l("L"的小写字母) 星期几,完整的文本格式 Sunday 到 Saturday 
N 星期中的第几天,1(表示星期一)到 7(表示星期天) 
S 每月天数后面的英文后缀,2 个字符 st,nd,rd 或者 th。可以和 j 一起用 
w 星期中的第几天,数字表示 0(表示星期天)到 6(表示星期六) 
z 年份中的第几天 0 到 365 

-------- 星期 ------- 
W 年份中的第几周,每周从星期一开始

-------- 月 ------- 
F 月份,完整的文本格式,例如 January 或者 March January 到 December 
m 数字表示的月份,有前导零 01 到 12 
M 三个字母缩写表示的月份 Jan 到 Dec 
n 数字表示的月份,没有前导零 1 到 12 
t 指定的月份有几天 28 到 31 

-------- 年 ------- 
L 是否为闰年 如果是闰年为 1,否则为 0 
Y 4 位数字完整表示的年份 例如:1999 或 2003 
y 2 位数字表示的年份 例如:99 或 03 

-------- 时间 ------- 
a 小写的上午和下午值 am 或 pm 
A 大写的上午和下午值 AM 或 PM 
g 小时,12 小时格式,没有前导零 1 到 12 
G 小时,24 小时格式,没有前导零 0 到 23 
h 小时,12 小时格式,有前导零 01 到 12 
H 小时,24 小时格式,有前导零 00 到 23 
i 有前导零的分钟数 00 到 59
s 秒数,有前导零 00 到 59

-------- 时区 ------- 
e 时区标识 例如:UTC,GMT,Atlantic/Azores 
I 是否为夏令时 如果是夏令时为 1,否则为 0 
O 与格林威治时间相差的小时数 例如:+0200 
P 与格林威治时间(GMT)的差别,小时和分钟之间有冒号分隔 例如:+02:00 
T 本机所在的时区 例如:EST,MDT
Z 时差偏移量的秒数。UTC 西边的时区偏移量总是负的,UTC 东边的时区偏移量总是正的。 -43200 到 43200 

-------- 完整的日期/时间 ------- 
c ISO 8601 格式的日期 2004-02-12T15:19:21+00:00 
r RFC 822 格式的日期 例如:Thu, 21 Dec 2000 16:01:07 +0200 
*/

// 2020-12-04 19:51:19
$today = date("Y-m-d H:i:s", 1607083017);

// 默认第二个参数为当前系统时间戳 
$today = date("Y-m-d H:i:s");

// 19:51:19 m is month
$today = date('H:m:s \m \i\s\ \m\o\n\t\h', 1607083017);


date_default_timezone_set 函数:

// date_default_timezone_set — 设定用于一个脚本中所有日期时间函数的默认时区

// 中国标准时间
date_default_timezone_set('PRC');           
date_default_timezone_set('Asia/Shanghai');


microtime 函数:

// microtime — 返回当前 Unix 时间戳和微秒数

echo microtime();        // 0.75838700 1607085440
echo microtime(true);    // 1607085536.9211

// 示例
function microtimeFloat()
{
    list($usec, $sec) = explode(" ", microtime());
    return ((float)$usec + (float)$sec);
}
$time_start = microtimeFloat();
usleep(100);
$time_end = microtimeFloat();
$time = $time_end - $time_start;

// 1秒=1000毫秒, 1秒=1000000 微秒(μs), 1微秒=1/1000000秒(s);
echo "睡眠秒数:{$time}\n";


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值