[英]How many days does 1 month represent in PHP?
我看到php有月加法和减法有奇怪的问题。
我的问题是:
几个例子:
echo date('Ym-d',strtotime('2011-03-31 -1 months')); //2011-03-03 echo date('Ym-d',strtotime('2011-03-30 -1 months')); //2011-03-02 echo date('Ym-d',strtotime('2011-03-29 -1 months')); //2011-03-01 echo date('Ym-d',strtotime('2011-03-28 -1 months')); //2011-02-28
从您的示例中,它看起来是从月份部分中减去1,然后更正非法日期。 你的第二个例子:
2011-03-30 - 1 month = 2011-02-30
。 这个日期不存在,因为2011年2月只有28天。 30 - 28 = 2
,因此它将其作为下个月的第2天。
但是,我还没有找到关于此的文档。
无论哪种方式,假设我是对的,你的问题的答案是否定的 ,“1个月”没有(天数)等于天数,这取决于输入。
strtotime
解析日期信息的方式在这里非常有价值。
你似乎想要的是上个月的第一天,对吗?
好吧,你可以将许多这些相关命令链接在一起 。 例如,从PHP交互式shell:
php > $d = date_create('2011-03-28 first day -1 month'); if($d) echo $d->format('Y-m-d H:i:s'); else echo "Failed.";
2011-02-01 00:00:00
php > $d = date_create('2011-03-29 first day -1 month'); if($d) echo $d->format('Y-m-d H:i:s'); else echo "Failed.";
2011-02-01 00:00:00
php > $d = date_create('2011-03-30 first day -1 month'); if($d) echo $d->format('Y-m-d H:i:s'); else echo "Failed.";
2011-02-01 00:00:00
php > $d = date_create('2011-03-31 first day -1 month'); if($d) echo $d->format('Y-m-d H:i:s'); else echo "Failed.";
2011-02-01 00:00:00
php > $d = date_create('2011-04-01 first day -1 month'); if($d) echo $d->format('Y-m-d H:i:s'); else echo "Failed.";
2011-03-01 00:00:00
first day
要求当月的第一天。 要求-1 month
到同一天的上个月。 因为我们已经回到了本月的第一天,所以这将始终按预期工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.