Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php DateTime修改函数跳过二月_Php_Date - Fatal编程技术网

Php DateTime修改函数跳过二月

Php DateTime修改函数跳过二月,php,date,Php,Date,当使用DateTime::modify方法向添加月份时,结果跳过二月 为什么它不输出2020-02-31 如何使用DateTime输出2020-02-29?(每月的最后一天) $date=新的日期时间(“2020-01-31”); echo$date->modify(“+1个月”)->格式(“Y-m-d”);//2020-03-02 PHPDateTime::modify(“+n个月”)根据月份和年份,在当前日期上添加28到31天 解决方案 我建议您使用modify和format方法从月的第

当使用
DateTime::modify
方法向添加月份时,结果跳过二月

  • 为什么它不输出
    2020-02-31
  • 如何使用DateTime输出
    2020-02-29
    ?(每月的最后一天)
$date=新的日期时间(“2020-01-31”);
echo$date->modify(“+1个月”)->格式(“Y-m-d”);//2020-03-02
PHP
DateTime::modify(“+n个月”)
根据月份和年份,在当前日期上添加28到31天

解决方案 我建议您使用
modify
format
方法从月的第一天开始增加月数:

//实例化DateTime对象。
$date=新日期时间(“2020-01-01”);
//将一个月添加到日期。
$date->modify(“+1个月”);//2020-02-01
//将日期格式化为“t”(获取当月的最后一天)。
$date->格式(“Y-m-t”);//2020-02-29
从一个月的第一天开始递增将永远不会引发2月份的问题,这是一个非常常见的问题,因为PHP DateTime会巧妙地从
2020-02-29
2020-03-31
添加一个月

为什么会这样? 在中,时间为30.436875天:

  • 4月、6月、9月和11月的30天
  • 1月、3月、5月、7月、8月、10月和12月的31天
  • 2月份28天或29天
PHP将在当前日期中添加给定月份的确切天数。

因此,如果从第一次递增开始递增,PHP将调整第一次递增后的日期 月的最后一天

例如:

让我们从3月31日最后一天算起,再加上一个月

由于当月(三月)有31天,PHP将增加31天。从
2020-03-31
开始增加31天将导致跳过整个4月份

$date=新日期时间(“2020-03-31”);//2020-03-31
echo$date->modify(“+1个月”)->格式(“Y-m-d”);//2020-05-01 |增加了31天(因为3月份有31天)。
echo$date->modify(“+1个月”)->格式(“Y-m-d”);//2020-06-01 |增加了31天(因为新日期是5月1日,这是一个有31天的月份)。
echo$date->modify(“+1个月”)->格式(“Y-m-d”);//2020-07-01 |增加30天
现在,让我们在4月30日的最后一天加上一个月

我们可以看到,由于接下来的几个月都有30多天,所以最后一天将保持不变, 到明年2月。由于2月的天数总是在28到29天之间,因此再加上31天,这个月就过去了,结果是3月2日

$date=新的日期时间(“2020-04-30”);
echo$date->modify(“+1个月”)->格式(“Y-m-d”);//2020-05-30 |增加30天。
echo$date->modify(“+1个月”)->格式(“Y-m-d”);//2020-06-30 |增加31天。
echo$date->modify(“+1个月”)->格式(“Y-m-d”);//2020-07-30 |增加30天。
// ...
echo$date->modify(“+1个月”)->格式(“Y-m-d”);//2021-01-30 |增加31天
echo$date->modify(“+1个月”)->格式(“Y-m-d”);//2021-03-02 |增加了31天(因为1月有31天)。
echo$date->modify(“+1个月”)->格式(“Y-m-d”);//2021-04-02 |增加了31天(因为新日期是3月2日,这是一个有31天的月份)。
这就是为什么建议从月的第一天开始增加月数, 因为第一个是所有月份的共同点

$date=新日期时间(“2020-01-01”);//2020-01-01
echo$date->modify(“+1个月”)->格式(“Y-m-d”);//2020-02-01 |增加31天
echo$date->modify(“+1个月”)->格式(“Y-m-d”);//2020-03-01 |增加了29天(因为2020年是闰年,yee-haw)。
echo$date->modify(“+1个月”)->格式(“Y-m-d”);//2020-04-01 |增加31天

我假设您正在用php编程。如果是这样,文档表明您将收到所获得的结果

文件明确指出要“小心”

示例#2增加或减少月份时要小心

 <?php
 $date = new DateTime('2000-12-31');

 $date->modify('+1 month');
 echo $date->format('Y-m-d') . "\n";

 $date->modify('+1 month');
 echo $date->format('Y-m-d') . "\n";
 ?>
 The above example will output:

 2001-01-31
 2001-03-03

非常感谢。我还可以使用哪个函数将月份添加为日期?您可以使用
date(“Y-m-d”,strotime(+n个月),strotime({date}))
 $date = new DateTime('now');
 $date->modify('last day of this month');
 echo $date->format('Y-m-d');