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";