php - 需要添加日期中的月数

标签 php mysql date

我需要一种在 PHP 中向任何日期添加月数的方法。我知道如何在 MySQL 中执行此操作,但不知道如何在 PHP 中执行此操作。这是我的尝试:

MySQL:

    SELECT DATE_ADD( '2011-12-29', INTERVAL 2
    MONTH ) // Output "2012-02-29"

    SELECT DATE_ADD( '2011-12-30', INTERVAL 2
    MONTH )  // output "2012-02-29"

    SELECT DATE_ADD( '2011-12-31', INTERVAL 2
    MONTH )  // output "2012-02-29"

PHP:

    $date = date_create('2011-12-29');
    $date->modify("+1 month");
    echo $date->format("Y-m-d");
    // Output is "2012-01-29" -- this is correct 

    $date = date_create('2011-12-30');
    $date->modify("+2 month");
    echo $date->format("Y-m-d");
    // Output is "2012-03-01" -- I need the answer like "2012-02-29" 

    $date = date_create('2011-12-31');
    $date->modify("+2 month");
    echo $date->format("Y-m-d");
    // Output is "2012-03-02" -- I need the answer like "2012-02-29" 

MySQL 输出正确。我在 PHP 中需要相同的输出。

最佳答案

如果你使用 PHP5 >= 5.3,你需要做的就是使用

$date->modify("last day of +2 months");

如其他答案中所建议。但是如果你使用 5.2,你可以尝试像这样改变你的代码:

Class DateTimeM Extends DateTime
{
    public function modify ($modify)
    {
            $day = $this->format ('d');
            $buf = new DateTime ($this->format ('Y-m-01\TH:i:sO'));
            $buf->modify ($modify);
            if ($day > $buf->format ('t'))
            {
                    $this->setDate ($buf->format ('Y'), $buf->format ('m'), $buf->format ('t'));
            }
            else
            {
                    $this->setDate ($buf->format ('Y'), $buf->format ('m'), $day);
            }
            $this->setTime ($buf->format ('H'), $buf->format ('i'), $buf->format ('s'));

            return $this;
      }
}

$date = new DateTimeM ('2011-12-29');
$date->modify("+2 month");
echo $date->format("Y-m-d");

我建议将类定义添加到一个单独的文件中并 require_once() 它。从 date_create() 切换到使用新类的对象构造函数。新类的 modify() 方法将使用原始给定月份的第一天而不是最后一天修改日期,并检查原始给定月份的天数是否大于新月份的天数。

这种方法的一个好处是它也适用于 $date->modify ('2 year 2 month')

关于php - 需要添加日期中的月数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8709228/

相关文章:

sql - PostgreSQL 拒绝只显示月份和年份

php - 如何在SQL中更新多列?

javascript - 使用 AJAX 和 PHP 将数据插入 MySQL

php - 如何将post值传递给upload.php表单?

php - 将我的 php 脚本转换为 mysqli 时出现问题

mysql - mysql 中是否有针对特定的、非连续日期的更有效的查询?

mySQL:尝试创建外键时出错

php - 如果行为空不工作 mysql

php - SQL 没有插入到 Yii 中有关系的表中

mongodb - 根据日期范围按日/月/周分组