PHP日期相对格式技术问询:如何获取指定月份的20日?
解决PHP Date Relative Formats获取当月20日的问题
嘿,这个场景我之前开发的时候也踩过坑!咱们先来直接说解决方案,再聊为什么你原来的写法不行。
正确的单次调用写法
你完全可以不用两次modify(),直接用更精准的相对格式就能一步到位:
- 获取当前月份的20日:
$currentMonth20th = new DateTime('20th day of this month'); // 或者用strtotime实现 $currentMonth20thStr = date('Y-m-d', strtotime('20th day of this month'));
- 如果是指定日期对应的月份20日(比如给定
2024-03-15,要得到2024-03-20):
$targetDate = new DateTime('2024-03-15'); $targetMonth20th = $targetDate->modify('20th day of this month');
为什么你原来的写法失效?
你用的"first day of this month +20 days"其实是格式组合的问题——PHP的日期解析器在处理first day of...这类锚点式格式时,后面的偏移量(+20 days)不会被正确叠加。这类锚点格式会强制将日期定位到指定的锚点位置,后续的偏移参数会被忽略(不同PHP版本可能有细微差异,但大部分场景下都会出现这个问题)。
所以不用纠结两次调用,换用20th day of this month这种直接指向目标日期的相对格式,就能一次达到需求啦。
内容的提问来源于stack exchange,提问作者Artur Smolen
相关产品推荐
相关产品推荐

