在PHP网站里,文章发表后想在标题后面跟一个日期,做法不复杂,关键看你的数据表里有没有存发布时间字段。一般文章表会有 created_at、post_date、add_time 这类字段。标题后面显示日期,无非就是把数据库里这个字段取出来,格式化后拼到标题旁边。
先看原生PHP的写法。假设你的文章表叫 articles,里面有 id、title、content、created_at,created_at 是 datetime 类型。列表页可以这样写:
```php
date_default_timezone_set(''Asia/Shanghai'');
$pdo = new PDO(''mysql:host=localhost;dbname=test;charset=utf8mb4'', ''root'', ''你的密码'');
$stmt = $pdo->query("SELECT id, title, created_at FROM articles ORDER BY created_at DESC");
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
$date = date(''Y-m-d'', strtotime($row[''created_at'']));
echo ''
如果 created_at 存的是 Unix 时间戳,比如 int(10) 类型,那就不要用 strtotime,直接 date(''Y-m-d'', $row[''created_at'']) 就行。如果显示出来是 1970-01-01,多半是字段类型判断错了,或者字段为空。可以先 var_dump($row[''created_at'']) 看看。
文章详情页也一样,只是取一条:

```php
$id = intval($_GET[''id'']);
$stmt = $pdo->prepare("SELECT title, created_at FROM articles WHERE id = ?");
$stmt->execute([$id]);
$article = $stmt->fetch(PDO::FETCH_ASSOC);
echo ''
日期格式可以按自己喜好改。date(''Y-m-d'') 是 2025-03-21,date(''Y年m月d日'') 是 2025年03月21日,date(''m-d'') 是 03-21。如果只想显示月日,用 date(''m-d'', ...)。如果想让日期小一点、颜色浅一点,加个 CSS:
```css
.post-date {
font-size: 14px;
color: #888;
font-weight: normal;
margin-left: 8px;
}
```
这样标题和日期就在同一行,日期不会抢标题的风头。如果标题太长,日期可能被挤到下一行,可以把标题容器设成 flex:
```css
.entry-title {
display: flex;
align-items: baseline;
gap: 8px;
flex-wrap: wrap;
}
```
如果你用的是 WordPress,那更简单。在主题模板里找到输出标题的地方,比如 index.php 或 single.php,把原来的 `` 改成:
```php
详情页就用 h1。如果不想改模板,也可以用 the_title 过滤器,让所有文章标题自动带上日期:
```php
function add_date_to_title($title) {
if (!is_admin() && in_the_loop() && (is_home() || is_archive() || is_single())) {
$title .= '' '' . get_the_date(''Y-m-d'') . '''';
}
return $title;
}
add_filter(''the_title'', ''add_date_to_title'');
```
注意要加 is_admin() 和 in_the_loop() 判断,不然后台文章列表、导航菜单里的标题也可能被加上日期。feed 里如果不想显示,也可以再加判断。
用 ThinkPHP 的话,模板里直接写:
```php
{$vo.title} {$vo.create_time|date=''Y-m-d'',###}
```
如果字段是 datetime,也可以用 strtotime 转一下。织梦、帝国这类 CMS 也类似,找到列表模板里标题输出的位置,在它后面加一个日期标签,或者用系统自带的时间格式化函数。
还有一点,日期放在标题后面,最好用 time 标签包一下,语义更清楚:
```php
```
搜索引擎能更好地理解这是发布时间。样式上给 time 加个 class 就行。
最后提醒,如果文章刚发表,标题后面显示的日期不对,先检查数据库里存的时间是不是当前时间,再检查 PHP 时区有没有设置。很多服务器默认 UTC,你在中国看到的时间会差 8 小时。在脚本开头加 date_default_timezone_set(''Asia/Shanghai''); 就能解决。如果数据库存的是 UTC,而你想显示北京时间,可以用 date(''Y-m-d'', strtotime($row[''created_at'']) + 8*3600)。不过更规范的做法是存 UTC,显示时再转。