繁体   English   中英

在几个月前查找日期,如果当前月份更短,它会错过日期吗?

[英]find date months ago, will it miss dates if current month is shorter?

我正在写一个脚本来查询“3个月前”的日期。 当我在考虑确保我不会遗漏任何东西时,我将其用于比较:

$date = date("Y-m-d",mktime(0,0,0,date("m")-$months_ago,date("d")));

我意识到我有可能错过约会。 例如,如果我在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');

$when = strtotime('-3 months');

如果您只需要月/年并且不想计算天数:

$m = 5;  // how many months ago, for example

$now = time();
$cm = date("m",$now); // current month
$yr = date("Y",$now) - intval((12 + $m - $cm)/12);
$month = (($cm + 11 - ($m % 12) ) % 12) + 1;

echo "$m months ago: $month  yr: $yr\n";

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM