📅  最后修改于: 2023-12-03 14:45:19.326000             🧑  作者: Mango
PHP内置函数strtotime()
可以将人类易读的日期时间字符串转换为UNIX时间戳,即从1970年1月1日00:00:00 GMT以来的秒数。此函数在处理日期时间时非常常用。
strtotime(string $time, int $now = time()): int|false
$time
: 表示日期时间的字符串。$now
: 可选参数,用于指定当前时间戳。默认值为当前时间。可以用strtotime()
将字符串转换为UNIX时间戳。
$timestamp = strtotime('2022-01-01');
echo $timestamp; // 输出:1640995200
虽然支持各种类型的日期时间字符串,但strtotime()
强烈建议在转换日期时间前统一它们的格式。
| 类型 | 格式 |
| --------------- | --------------------------------------------------- |
| 绝对日期时间 | YYYY-MM-DD HH:MM:SS
或 YYYY-MM-DD HH:MM:SS +HHMM
|
| 相对日期时间 | now
或 yesterday
或 +1 day
|
| Unix 时间戳格式 | @unix_timestamp
|
例如:
$timestamp = strtotime('2022-01-01 12:34:56 +0800');
echo $timestamp; // 输出:1640999696(东八区)
也可以用相对日期时间字符串。
$timestamp = strtotime('yesterday');
echo $timestamp; // 输出昨天同一时刻的时间戳
strtotime()
的第二个可选参数指定当前时间戳。
$timestamp = strtotime('1 hour', time() - 3600);
echo $timestamp; // 输出:当前时间戳 - 3600秒
如果转换成功,则返回一个Unix时间戳。如果转换失败,则返回false
。
strtotime()
函数是时区敏感的。在使用该函数之前最好先设置了时区。可以使用date_default_timezone_set()
函数进行设置。 strtotime()
会返回false
。切记要检查返回结果。strtotime()
函数字符串解析的顺序。根据解析顺序,可能会引起一些难以调试的问题。例如,解析字符串2012-08-14 00:00:00 +0200
时,时区偏移量被解析为小时而不是分钟。+2 hours
时,应该使用'...'
将它括起来,如下所示:$timestamp = strtotime('+2 hours');
echo $timestamp; // 错误示范:输出固定时间
$timestamp = strtotime('+2 hours', time());
echo $timestamp; // 正确示范:输出当前时间 + 2 小时
$timestamp = strtotime('+2 hours', time());
echo "$timestamp\n"; // 正确示范:输出当前时间 + 2 小时
$timestamp = strtotime('+' . 2 . 'hours', time());
echo "$timestamp\n"; // 正确示范:输出当前时间 + 2 小时