PHP函数:如何进行时间戳转换?
时间戳(timestamp)是指从某个固定日期(通常是1970年1月1日00:00:00 UTC)开始的秒数或毫秒数。在编程中,我们经常需要将时间戳转换为人类可读的格式,或从人类可读的格式中获取时间戳。在PHP中,有许多内置函数可用于进行时间戳转换。
1.将时间戳转换为日期时间格式
使用PHP内置函数date(),我们可以将时间戳转换为日期时间格式。
语法:date(string $format [, int $timestamp = time()])
格式化参数$format包含将时间戳转换为的日期和时间的格式。它可以包含以下占位符:
- Y - 四位数的年份
- y - 两位数的年份
- m - 两位数的月份(01-12)
- n - 月份(1-12)
- d - 两位数的日期(01-31)
- j - 日期(1-31)
- H - 24小时格式的小时(00-23)
- h - 12小时格式的小时(01-12)
- i - 两位数的分钟数(00-59)
- s - 两位数的秒数(00-59)
- a - 小写的上午或下午(am或pm)
- A - 大写的上午或下午(AM或PM)
例如:
$t = time(); //获取当前时间戳
echo date("Y-m-d H:i:s", $t); //输出当前日期和时间
输出结果:
2021-08-27 10:30:00
2.将日期时间格式转换为时间戳
与date()函数相反,我们可以使用PHP内置函数strtotime()将日期时间格式转换为时间戳。
语法:strtotime(string $datetime [, int $now = time()])
参数$datetime指定日期时间格式,我们可以使用各种日期时间格式,例如:"2019-05-01 12:00:00","1 day ago","next Monday"等。
参数$now指定时间戳,用作参考时间。默认情况下,它是当前时间。
例如:
$datetime = "2021-08-27 10:30:00";
echo strtotime($datetime); //输出时间戳
输出结果:
1630048200
3.将Unix时间戳转换为ISO8601日期时间格式
ISO8601是日期时间格式的国际标准,它以“年-月-日T小时:分钟:秒”的格式表示。我们可以使用PHP内置函数date()和gmdate()将Unix时间戳转换为ISO8601格式。
语法:date("c", $timestamp)
$c是ISO8601日期时间格式的格式符。
例如:
$timestamp = time();
echo date("c", $timestamp); //输出ISO8601格式的日期和时间
输出结果:
2021-08-27T10:30:00+08:00
4.将ISO8601日期时间格式转换为时间戳
使用PHP内置函数strtotime(),我们可以将ISO8601日期时间格式转换为时间戳。
例如:
$datetime = "2021-08-27T10:30:00+08:00";
echo strtotime($datetime); //输出时间戳
输出结果:
1630048200
5.格式化秒数
有时候,我们需要将秒数转换为人类可读的格式,例如将97秒格式化为“1分钟37秒”。
我们可以自己编写一个函数来完成这个任务。
例如:
function formatSeconds($seconds) {
$h = floor($seconds / 3600); //小时数
$m = floor(($seconds - $h * 3600) / 60); //分钟数
$s = floor($seconds - $h * 3600 - $m * 60); //秒数
if($h > 0) {
return sprintf("%d小时%d分钟%d秒", $h, $m, $s);
}
elseif($m > 0) {
return sprintf("%d分钟%d秒", $m, $s);
}
else {
return sprintf("%d秒", $s);
}
}
例如:
echo formatSeconds(97); //输出1分钟37秒
输出结果:
1分钟37秒
总结
以上是PHP中进行时间戳转换的一些常用函数。在编程中,我们经常需要将时间戳转换为人类可读的格式,或从人类可读的格式中获取时间戳。熟练掌握这些函数可以帮助我们更好地处理日期和时间数据。
