gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 05:38:29 25 4
gpt4 key购买 nike

我需要一种在 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com