我正在写一个脚本来查询"3个月前"的日期.当我在考虑确保我不会遗漏任何东西时,我将其用于比较:
$date = date("Y-m-d",mktime(0,0,0,date("m")-$months_ago,date("d")));
Run Code Online (Sandbox Code Playgroud)
我意识到我有可能错过约会.例如,如果我在11月30日搜索三个月前的日期,我会得到8/30.但第二天是12/1,三个月前是9/1.所以在这个剧本中我错过了8/31.
我想最好的方法是使用天数(90天)而不是几个月.这是这样的最佳做法吗?
直接和strtotime('-3 month');你一起去也可以在mktime的月份参数上给出像-3这样的负数,它会像魅力一样工作(更好的是第二个解决方案).不,它不会跳过几天 - 如果"现在"是2011-06-17它将返回相当于2011-03-17的时间戳.
编辑:嗯,实际上你可能错过了几天(我没有检查你的陈述),但毕竟你的时间单位是几个月,而不是几天.我所说的是,在阳历月里不是恒定的时间 - 可能是28天,29天,30天或31天.
假设您想计算付费订阅期的月数.如果用户在2011-02-15支付一个月,他的订阅何时到期?我猜想2011-03-15,即使这两个日期之间只有28天如果他支付2011-03-15的订阅费用,他将在2011-04-15之前满31天,这似乎完全公平对我来说,订阅是"一个月",这恰好是一年中不同的天数.
如果,在你的情况下,你不想得到"3个月前",但想要获得相对代表"3个月"的恒定时间,那么你可以使用中等月份长度 - 88.59天,或88天14小时10分钟 用代码表示的将是:
strtotime('-88 days -14 hours -10 minutes');