PHP开发中字符串和日期的转换是高频需求,无论是处理用户输入的生日、订单时间,还是格式化数据库存储的时间戳,都需要用到相关处理函数。strtotime可以将大部分人类可读的日期字符串转为Unix时间戳,date则可以将时间戳格式化为自定义的日期字符串,两者配合就能完成基础的转换工作。

strtotime函数基础用法
strtotime函数的核心作用是将英文文本的日期时间描述解析为Unix时间戳,也就是从1970年1月1日00:00:00 UTC到当前时间的秒数。它的基本语法非常简单,只需要传入一个日期字符串作为参数即可。
常见的可解析字符串包括标准日期格式、相对时间描述等,下面是一些基础示例:
<?php
// 解析标准日期字符串
$time1 = strtotime("2024-05-20");
$time2 = strtotime("2024/05/20 14:30:00");
// 解析相对时间描述
$time3 = strtotime("yesterday");
$time4 = strtotime("+3 days");
$time5 = strtotime("next Monday");
echo $time1 . PHP_EOL; // 输出对应日期的时间戳
echo $time2 . PHP_EOL;
echo $time3 . PHP_EOL;
echo $time4 . PHP_EOL;
echo $time5 . PHP_EOL;
?>
需要注意的是,如果传入的字符串无法被解析,strtotime会返回false,实际使用中最好做一下合法性判断,避免后续处理出错。
date函数基础用法
date函数的作用是将时间戳按照指定的格式转换为可读的日期字符串,它的第一个参数是格式字符串,第二个可选参数是要转换的时间戳,如果不传则默认使用当前时间的时间戳。
常用的格式字符包括:Y表示四位年份,m表示两位月份,d表示两位日期,H表示24小时制小时,i表示分钟,s表示秒。下面是基础示例:
<?php
// 格式化当前时间
echo date("Y-m-d H:i:s") . PHP_EOL;
// 格式化指定时间戳
$timestamp = 1716163200; // 对应2024-05-20 00:00:00
echo date("Y年m月d日", $timestamp) . PHP_EOL;
echo date("m/d/Y", $timestamp) . PHP_EOL;
?>
字符串转日期的完整实现
将字符串转为指定格式的日期,只需要先用strtotime把字符串转为时间戳,再用date把时间戳格式化为目标格式即可,这是最基础的转换流程。
场景1:普通日期字符串转自定义格式
比如用户输入的日期是"2024-05-20",需要转为"2024年05月20日"的格式:
<?php
$str = "2024-05-20";
$timestamp = strtotime($str);
if ($timestamp !== false) {
$date = date("Y年m月d日", $timestamp);
echo $date; // 输出 2024年05月20日
} else {
echo "日期格式错误";
}
?>
场景2:相对时间字符串转日期
比如需要把"3天后"转为具体日期:
<?php
$str = "+3 days";
$timestamp = strtotime($str);
$date = date("Y-m-d", $timestamp);
echo $date; // 输出当前日期加3天的结果
?>
常见注意事项
- strtotime对日期字符串的解析依赖服务器的时区设置,如果时区不对会导致转换结果偏差,建议在使用前通过
date_default_timezone_set设置正确的时区,比如date_default_timezone_set("Asia/Shanghai")。 - strtotime无法解析所有格式的字符串,比如中文日期"2024年五月二十日"就无法直接解析,遇到这类情况需要先做字符串替换处理,再调用strtotime。
- date函数的格式字符区分大小写,比如Y是四位年份,y是两位年份,H是24小时制,h是12小时制,使用时需要注意区分。
除了这两个函数,PHP还提供了DateTime类来处理更复杂的日期操作,不过对于入门阶段的基础字符串转日期需求,strtotime配合date已经足够覆盖大部分场景,熟练掌握这两个函数的用法,就能解决日常开发中的基础日期转换问题。