2

将现有日期添加 1 年并删除 1 天的最佳方法是什么。因此,如果今天的日期是 2013 年 4 月 9 日,我希望有新的日期 2014 年 3 月 9 日。每 4 年也有一个问题,一年有 366 天而不是 365 天,当然如果开始日期是 01/09/2013 那么结束日期应该是 31/08/2014,它应该改变月份。请帮忙。我的日期字段看起来像这样。我想所以我必须用 mktime 或 time 做点什么?

$renewalDate = date('d F Y', strtotime($rows['CoverStartDate']));
4

4 回答 4

7

DateTime()考虑闰年:

// PHP 5.2+
$dt = new DateTime($rows['CoverStartDate']);
$dt->modify('+1 year');
$dt->modify('-1 day');
$renewalDate  = $dt->format('d F Y');

或者:

// PHP 5.3+
$dt = new DateTime($rows['CoverStartDate']);
$dt->add(new DateInterval('P1Y'));
$dt->sub(new DateInterval('P1D'));
$renewalDate  = $dt->format('d F Y');

或者:

// PHP 5.5+
$renewalDate = (new DateTime('04/09/2013'))->add(new DateInterval('P1Y'))
                                           ->sub(new DateInterval('P1D'))
                                           ->format('d F Y');
于 2013-09-04T14:35:43.600 回答
3

尝试:

$modificator = ' +1 year -1 day';
$renewalDate = date('d F Y', strtotime($rows['CoverStartDate'] . $modificator));
于 2013-09-04T14:32:04.427 回答
2

看看strtotime能做什么:

<?php
echo strtotime("now"), "\n";
echo strtotime("10 September 2000"), "\n";
echo strtotime("+1 day"), "\n";
echo strtotime("+1 week"), "\n";
echo strtotime("+1 week 2 days 4 hours 2 seconds"), "\n";
echo strtotime("next Thursday"), "\n";
echo strtotime("last Monday"), "\n";
?>

(取自官方PHP 手册)。

在你的情况下:

$renewalDate = date('d F Y', strtotime($rows['CoverStartDate']));
$desiredDate = date('d F Y', strtotime("{$renewalDate} + 1 year - 1 day"));
echo $date;

我自己试过的例子是:

$date = date("d F Y");
$date = strtotime("{$date} + 1 year - 1 day");
$date = date("d F Y",$date);
echo $date;

并输出 2014 年 9 月 3 日,这是正确的。

希望这可以帮助!

于 2013-09-04T14:35:37.223 回答
1

这从今天的一年中减去一天:今天+ 1 年- 1 天

$yearMinusOneDay = Date("Y-m-d h:i:s", strtotime("now"." +1 Year "."-1 day"));

于 2018-05-10T12:11:28.270 回答