PHP日期筛选问题:仅按日判断不按月,如何实现指定日期后信息展示?
问题分析与解决方案
嗨,这个问题我太熟啦!你现在遇到的核心问题是直接用字符串格式的日期做比较,咱们一步步拆解清楚:
为什么月份判断不生效?
当你用>=比较d-m-Y(日-月-年)格式的字符串时,PHP是按字符顺序逐位对比的。举个实际例子:
假设当前日期是01-05-2018(5月1日),和你的起始日期28-04-2018(4月28日)比较,第一个字符0比2小,PHP就会直接判定01-05-2018 < 28-04-2018——但实际5月1日明明比4月28日晚,这就是月份判断失效的根源!
两种靠谱的解决方法
方法1:转换成时间戳比较(最稳妥的通用方式)
把日期转换成Unix时间戳(从1970年1月1日到指定时间的秒数),再做数值比较:
<?php // 直接用time()获取当前时间戳,比先转字符串再转时间戳更高效 $datum = time(); $begindatum = strtotime('28-04-2018'); if ($datum >= $begindatum) { echo "test"; } ?>
方法2:用DateTime类处理(面向对象,可读性更强)
PHP 5.2及以上支持DateTime类,能明确指定日期格式,避免解析歧义:
<?php $datum = new DateTime(); // 默认生成当前日期时间对象 $begindatum = DateTime::createFromFormat('d-m-Y', '28-04-2018'); if ($datum >= $begindatum) { echo "test"; } ?>
小提醒
永远不要直接比较d-m-Y、m/d/Y这类非“年-月-日”排序的日期字符串,只有像Y-m-d(比如2018-04-28)这种按从大到小时间单位排序的字符串,直接比较才会符合逻辑,但更稳妥的还是用时间戳或DateTime对象哦~
内容的提问来源于stack exchange,提问作者J. Doe
相关产品推荐
相关产品推荐

