gpt4 book ai didi

php - 如何在不跳过日期的情况下添加 1 个月,即 2 月

转载 作者:IT王子 更新时间:2023-10-28 23:58:05 26 4
gpt4 key购买 nike

Possible Duplicate:
PHP DateTime::modify adding and subtracting months

我有一个开始日期(即 2011-01-30)并想增加 1 个月。

问题在于定义月份是什么。因此,如果我使用以下代码:

$d1 = DateTime::createFromFormat('Y-m-d H:i:s', '2011-01-30 15:57:57');
$d1->add(new DateInterval('P1M'));
echo $d1->format('Y-m-d H:i:s');

我得到以下结果:2011-03-02 15:57:57

问题是,我需要它使用以下规则:

  • 如果我添加 1 个月,它只会在月份部分添加 1 并留下日部分(2011-01-15 将变为 2011-02-15)
  • 如果我们将结束的月份中不存在这一天,我们将采用该天的最后一个存在的日期(2011-01-30 将变为 2011-02-28)

php中是否有一个通用函数可以做到这一点,还是我必须自己编写代码?也许我只是缺少一个参数或什么的!?

最佳答案

好像没有现成的函数,所以自己写的。这应该可以解决我的问题。无论如何,感谢您的回答和评论。如果你会发现一些错误,请在评论中提供。

此函数计算添加某个月份后我将结束的月份和年份。然后它检查日期是否正确。如果不是,我们会遇到该日期不在目标月份的情况,因此我们取该月份的最后一天。使用 PHP 5.3.10 测试。

<?php
$monthToAdd = 1;

$d1 = DateTime::createFromFormat('Y-m-d H:i:s', '2011-01-30 15:57:57');

$year = $d1->format('Y');
$month = $d1->format('n');
$day = $d1->format('d');

$year += floor($monthToAdd/12);
$monthToAdd = $monthToAdd%12;
$month += $monthToAdd;
if($month > 12) {
$year ++;
$month = $month % 12;
if($month === 0)
$month = 12;
}

if(!checkdate($month, $day, $year)) {
$d2 = DateTime::createFromFormat('Y-n-j', $year.'-'.$month.'-1');
$d2->modify('last day of');
}else {
$d2 = DateTime::createFromFormat('Y-n-d', $year.'-'.$month.'-'.$day);
}
$d2->setTime($d1->format('H'), $d1->format('i'), $d1->format('s'));
echo $d2->format('Y-m-d H:i:s');

关于php - 如何在不跳过日期的情况下添加 1 个月,即 2 月,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10724305/

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