PHP日期时间加上6个月和1年

PHP日期时间加上6个月和1年,php,datetime,Php,Datetime,我使用PHP datetime设置了一个日期,如下所示 $originaldate = 2019-01-10 17:52:17 $converted = DateTime::createFromFormat("Y-m-d H:i:s", $originaldate); 该日期已成功转换为PHP DateTime对象,现在我尝试添加两个新日期,比该日期提前6个月1年 实现这一目标的最佳方法是什么?像这样: $sixMonths = date('Y-m-d', strtotime($conv

我使用PHP datetime设置了一个日期,如下所示

$originaldate = 2019-01-10 17:52:17
$converted = DateTime::createFromFormat("Y-m-d H:i:s", $originaldate);
该日期已成功转换为PHP DateTime对象,现在我尝试添加两个新日期,比该日期提前6个月1年

实现这一目标的最佳方法是什么?

像这样:

   $sixMonths = date('Y-m-d', strtotime($converted. ' + 6 months'));
   $oneYear = date('Y-m-d', strtotime($converted. ' + 1 year'));
像这样:

   $sixMonths = date('Y-m-d', strtotime($converted. ' + 6 months'));
   $oneYear = date('Y-m-d', strtotime($converted. ' + 1 year'));
您可以选择创建副本的时间,并使用更改新日期

试试这个

$sixMonths = clone $converted;
$sixMonths->modify('+6 months');

$oneYear = clone $converted;
$oneYear->modify('+1 year');
您可以选择创建副本的时间,并使用更改新日期

试试这个

$sixMonths = clone $converted;
$sixMonths->modify('+6 months');

$oneYear = clone $converted;
$oneYear->modify('+1 year');
退房

P18M是指18个月的间隔

退房


P18M表示18个月的间隔

您应该查看php类DateInterval

下面是一个例子:

$converted = DateTime::createFromFormat("Y-m-d H:i:s", $originaldate); 
$converted1Year = $converted->add(new DateInterval("P1Y"));//add one year //object reference is the same so adding a year altered original object and a reference to it is passed back, not copied
$converted2 = DateTime::createFromFormat("Y-m-d H:i:s", $originaldate);
$converted6months = $converted2->add(new DateInterval("P6M")); // add 6 months
正如评论中所建议的,这里是DateTimeImmutable等价物:

$converted = DateTimeImmutable::createFromFormat("Y-m-d H:i:s", $originaldate); 
$converted1Year = $converted->add(new DateInterval("P1Y"));
$converted6Months = $converted->add(new DateInterval("P6M"));

您应该查看php类DateInterval

下面是一个例子:

$converted = DateTime::createFromFormat("Y-m-d H:i:s", $originaldate); 
$converted1Year = $converted->add(new DateInterval("P1Y"));//add one year //object reference is the same so adding a year altered original object and a reference to it is passed back, not copied
$converted2 = DateTime::createFromFormat("Y-m-d H:i:s", $originaldate);
$converted6months = $converted2->add(new DateInterval("P6M")); // add 6 months
正如评论中所建议的,这里是DateTimeImmutable等价物:

$converted = DateTimeImmutable::createFromFormat("Y-m-d H:i:s", $originaldate); 
$converted1Year = $converted->add(new DateInterval("P1Y"));
$converted6Months = $converted->add(new DateInterval("P6M"));
$converted=$converted->修改“+6个月”; $converted=$converted->修改“+1年” $converted=$converted->修改“+6个月”;
$converted=$converted->修改“+1年”;你可以试着玩玩碳。carbon.nesbot.com/docs/它非常有用,而且可读性很强。您可以尝试使用carbon。carbon.nesbot.com/docs/它非常有用,而且可读性很强。这是PHP吗@DeniseMeander Yes clone is part此方法是否提供了任何有关使用DateTime::add的信息?@fightstarr20 DateTime::modify获取人类可读字符串,DateTime::add获取DateInterval对象,该对象使用ISO-8601格式字符串。完全取决于你喜欢哪一个。这是PHP吗@DeniseMeander Yes clone is part此方法是否提供了任何有关使用DateTime::add的信息?@fightstarr20 DateTime::modify获取人类可读字符串,DateTime::add获取DateInterval对象,该对象使用ISO-8601格式字符串。不过,完全取决于您的喜好。如果$converted是DateTime对象,这将不起作用,会吗?当提出问题的人已经开始使用更复杂的DateTime对象时,基于简单的基于unix时间戳的函数(如date和StrotTime)给出答案很少是一个好建议。如果$converted是DateTime对象,这将不起作用,会吗?当提出问题的人已经开始使用更复杂的DateTime对象时,基于简单的基于unix时间戳的函数(如date和StrotTime)给出答案很少是好的建议。这不起作用-请注意,每次调用add都会修改$converted并返回它,而不仅仅是返回一个新对象。所以$sixmonthsahead实际上提前了18个月,因为该对象已经添加了一年。如果改用DateTimeImmutable,则可以避免此问题。@user3647971:您可以找到比两次启动同一对象更好的解决方案。例如,您可以使用DateTimeImmutable类。这不起作用-请注意,每次调用add都会修改$converted并返回它,而不仅仅是返回一个新对象。所以$sixmonthsahead实际上提前了18个月,因为该对象已经添加了一年。如果改用DateTimeImmutable,则可以避免此问题。@user3647971:您可以找到比两次启动同一对象更好的解决方案。例如,您可以使用DateTimeImmutable类。