最直接获取今天日期用date()函数,如date('Y-m-d');需注意时区配置,推荐用DateTime类支持日期运算,避免strtotime等冗余调用。

PHP获取今天日期用 date() 最直接
最常用也最稳妥的方式就是 date() 函数,它默认基于当前服务器时间返回格式化后的字符串。不需要额外初始化或引入扩展,开箱即用。
常见写法:date('Y-m-d') 得到类似 2024-06-12 的结果;date('Y年m月d日') 得到中文格式(注意单引号避免变量解析)。
- 如果需要带时间,加
H:i:s,比如date('Y-m-d H:i:s') - 时区影响很大:若服务器时区不是你期望的(比如设成了 UTC),结果会错。务必确认
date_default_timezone_set('Asia/Shanghai')已调用,或在 php.ini 中配好date.timezone -
date()返回的是字符串,不是 DateTime 对象,后续做日期计算(如加减天数)不方便,这时该换方案
需要做日期运算就用 DateTime 类
当你要“获取今天,然后加 3 天”“判断是否过了今天 18:00”这类操作时,date() 就力不从心了,必须上 DateTime。
获取今天最简写法:new DateTime() 或更明确的 new DateTime('today') —— 两者等价,都表示当前日期零点(00:00:00)。
立即学习“PHP免费学习笔记(深入)”;
- 加减日期用
modify()或add():$date->modify('+5 days')或$date->add(new DateInterval('P5D')) - 输出仍需格式化:
$date->format('Y-m-d'),不能直接 echo 对象 - 构造时传入时区可规避全局设置问题:
new DateTime('today', new DateTimeZone('Asia/Shanghai'))
date() 和 DateTime 都可能因时区出错
这是线上最容易被忽略、也最难排查的问题:明明代码没改,某天起日期突然差一天。大概率是时区配置漂移了。
- 用
date_default_timezone_get()打印当前生效时区,别只信 php.ini 里的注释 - 用
date('e, T, Z')查看当前时区缩写(如Asia/Shanghai)、简称(CST)和 UTC 偏移秒数(28800),三者对不上就说明有问题 - Docker 环境尤其容易中招:基础镜像可能没设时区,
date命令显示对,但 PHP 进程仍用 UTC
不要用 time() + date() 拼今天
有人写 date('Y-m-d', time()),语法没错,但纯属多此一举。date() 第二个参数为 null 时默认用 time(),所以 date('Y-m-d') 更简洁、少一个函数调用。
更危险的是用 strtotime('today') 再喂给 date():date('Y-m-d', strtotime('today'))。这不仅多余,还多了一层字符串解析开销,且 strtotime() 在某些极端时区或夏令时边界可能有歧义。
真正需要 strtotime() 的场景是解析动态字符串(如用户输入的 "next Monday"),而不是固定取“今天”。



















