You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在PHP/WordPress中从URL解析yyyy-mm-dd格式的日期?

从带日期的URL中提取日期(PHP及WordPress场景)

嘿,我来帮你搞定这个问题!要从http://example.com/nepal/events/visit-nepal-2020/2020-01-09这种格式的URL里提取yyyy-mm-dd格式的日期,不管是普通PHP环境还是WordPress场景,都有几种靠谱的方法,我给你详细拆解:

一、普通PHP环境下的提取方法

方法1:拆分URL路径(适合日期在末尾的场景)

你的日期刚好在URL路径的最后一段,这种情况直接拆分路径就能拿到,步骤很清晰:

$url = 'http://example.com/nepal/events/visit-nepal-2020/2020-01-09';

// 解析URL,只取出路径部分
$path = parse_url($url, PHP_URL_PATH);
// 去掉路径首尾的斜杠,再按斜杠分割成数组
$pathSegments = explode('/', trim($path, '/'));
// 取数组最后一个元素就是日期
$date = end($pathSegments);

// 推荐:验证日期格式是否有效(避免拿到无效日期比如2020-13-01)
if (DateTime::createFromFormat('Y-m-d', $date) !== false) {
    echo "提取到的日期:{$date}";
} else {
    echo "URL中的日期格式不符合要求";
}

方法2:正则表达式(适合日期位置不固定的场景)

如果日期可能出现在URL的任意位置,用正则匹配yyyy-mm-dd的通用格式更灵活:

$url = 'http://example.com/nepal/events/visit-nepal-2020/2020-01-09';

// 匹配yyyy-mm-dd格式的正则表达式
$datePattern = '/\b\d{4}-\d{2}-\d{2}\b/';
if (preg_match($datePattern, $url, $matches)) {
    $date = $matches[0];
    echo "提取到的日期:{$date}";
} else {
    echo "未在URL中找到符合格式的日期";
}

二、WordPress场景下的优化方法

WordPress有自己的URL重写和查询变量机制,我们可以利用这些特性让日期提取更优雅,也更符合WordPress的开发规范:

方法1:通过自定义查询变量提取(推荐)

如果这个URL是WordPress的自定义文章类型(比如活动event),可以先注册查询变量并配置重写规则:

  1. 在主题的functions.php中添加以下代码,注册查询变量并设置重写规则:
// 注册自定义查询变量
function register_event_date_var($vars) {
    $vars[] = 'event_date';
    return $vars;
}
add_filter('query_vars', 'register_event_date_var');

// 添加重写规则,把URL中的日期映射到查询变量
function add_event_rewrite_rule() {
    add_rewrite_rule(
        'nepal/events/([^/]+)/(\d{4}-\d{2}-\d{2})/?',
        'index.php?post_type=event&name=$matches[1]&event_date=$matches[2]',
        'top'
    );
}
add_action('init', 'add_event_rewrite_rule');
  1. 保存完代码后,一定要去WordPress后台的「设置→固定链接」页面点击「保存更改」,刷新重写规则。

  2. 在对应的模板文件(比如single-event.php)中,直接通过get_query_var()获取日期:

$eventDate = get_query_var('event_date');

// 同样建议验证日期有效性
if ($eventDate && DateTime::createFromFormat('Y-m-d', $eventDate)) {
    echo "活动日期:{$eventDate}";
}

方法2:结合WordPress函数+普通PHP方法

如果不想配置重写规则,也可以先获取当前页面的URL,再用普通PHP的方法提取:

// 获取当前页面的URL
$currentUrl = get_permalink();

// 用正则提取日期(和普通PHP方法一致)
$datePattern = '/\b\d{4}-\d{2}-\d{2}\b/';
if (preg_match($datePattern, $currentUrl, $matches)) {
    $date = $matches[0];
    // 后续业务处理
}

注意事项

  • 不管用哪种方法,都建议添加日期格式验证,避免提取到无效的日期字符串;
  • WordPress中修改重写规则后,必须刷新固定链接才能生效,否则新规则不会被识别。

内容的提问来源于stack exchange,提问作者dbp

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 08:47:30