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

PHP中如何根据mm和yy变量创建日期并判断是否过期

日期过期检查的实现方案

嘿,这个需求很常见,我来给你捋清楚怎么实现!

首先咱们得明确:仅用月份$mm = "01"和年份$yy = "12"的话,通常默认是指该月的最后一天(比如会员到期、账单截止日一般都是月底),当然如果你需要的是当月第一天,也可以调整,我会把两种情况都说明。

方法一:推荐用DateTime类(更可靠、易维护)

DateTime类是PHP处理日期的首选,能自动处理闰年、不同月份天数这些细节,还能轻松处理时区问题。

// 先设置时区(避免时区差异导致的错误,根据你的业务场景调整)
date_default_timezone_set('Asia/Shanghai');

// 你的变量
$mm = "01";
$yy = "12";

// 1. 创建目标日期:默认取当月最后一天
// 先构造当月第一天的DateTime对象
$targetDate = new DateTime("$yy-$mm-01");
// 修改为当月最后一天
$targetDate->modify('last day of this month');
// 如果需要的是当月第一天,直接用上面的$targetDate即可,不用modify

// 2. 获取当前日期(精确到天的话,可以设置为当天的开始或结束)
$currentDate = new DateTime();
// 如果要精确到当天结束时间比较,也可以这样设置:
// $currentDate->modify('today 23:59:59');

// 3. 比较日期
if ($currentDate > $targetDate) {
    echo "该日期已过期";
} else {
    echo "该日期未过期";
}

方法二:用时间戳比较(兼容旧版PHP)

如果你习惯用date()和strtotime(),也可以转成时间戳来对比,但要注意日期格式的正确性:

date_default_timezone_set('Asia/Shanghai');

$mm = "01";
$yy = "12";

// 构造目标日期的时间戳(这里取当月最后一天的23:59:59)
$targetTimestamp = strtotime("$yy-$mm-01 last day of month 23:59:59");
// 如果取当月第一天,就是strtotime("$yy-$mm-01 00:00:00")

// 当前时间戳
$currentTimestamp = time();

// 比较
if ($currentTimestamp > $targetTimestamp) {
    echo "该日期已过期";
} else {
    echo "该日期未过期";
}

重要注意点

  • 两位年份的歧义:你这里的$yy = "12",PHP会默认解析为2012年,但如果是"70"会解析为1970年,为了避免混淆,建议尽量使用四位年份(比如"2012")。
  • 时区问题:一定要设置正确的时区,否则不同服务器的时间可能会有偏差,导致判断错误。
  • 精确性:如果需要精确到时分秒,记得在构造日期时加上具体时间(比如23:59:59),避免当天的日期被误判。

按照你的变量$mm = "01"和$yy = "12"(2012年1月),运行上面的代码会输出**"该日期已过期"**,符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 00:03:10