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

PHP:如何将GET获取的年份变量正确转换为指定日期格式?

解决方法

你的问题出在strtotime("$year")的解析逻辑上:单独传入年份字符串时,strtotime会将其解析为当前日期对应年份的同一天(比如当前是2023年10月5日,strtotime("2020")会得到2020-10-05的时间戳);如果$_GET['year']没有正确获取到值(比如为空),strtotime("")会返回当前时间戳,最终date函数就会使用当前年份。

下面是几种可靠的修改方案:

方案1:直接字符串拼接(最简单高效)

既然已经明确要获取目标年份的年初和年末,直接用年份字符串拼接日期部分即可,不需要调用日期处理函数:

$year = $_GET['year']; // 例如2020
$start = "$year-01-01"; // 直接得到2020-01-01
$stop = "$year-12-31";  // 直接得到2020-12-31

方案2:修复strtotime的参数

如果一定要用date和strtotime,可以给strtotime传入完整的日期字符串,确保解析准确:

$year = $_GET['year'];
$start = date('Y-m-d', strtotime("$year-01-01"));
$stop = date('Y-m-d', strtotime("$year-12-31"));

方案3:使用DateTime类(更健壮的面向对象方式)

PHP的DateTime类处理日期更可靠,尤其适合复杂的日期操作:

$year = $_GET['year'];
$start = (new DateTime("$year-01-01"))->format('Y-m-d');
$stop = (new DateTime("$year-12-31"))->format('Y-m-d');

额外建议:验证年份有效性

为了避免无效输入导致的问题,建议先验证$_GET['year']是否为合法的四位数字:

if (isset($_GET['year']) && preg_match('/^\d{4}$/', $_GET['year'])) {
    $year = $_GET['year'];
    $start = "$year-01-01";
    $stop = "$year-12-31";
} else {
    // 处理无效输入,比如默认使用当前年份
    $year = date('Y');
    $start = "$year-01-01";
    $stop = "$year-12-31";
}

内容的提问来源于stack exchange,提问作者Michaël Thönnissen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 03:41:13