首页 > 解决方案 > 如何在 php 中使用日期变量和 date_add()?

问题描述

我有一个$date变量,我喜欢将他的值复制到$date1. 问题是当我修改 $date1 值时date_add(),$date 的值也被修改了。

如何只修改$date1值?

<?php
$date=date_create("2013-03-15");

echo "date =>" . date_format($date,"Y-m-d");
  echo " ******** ";
$date1=$date;
date_add($date1,date_interval_create_from_date_string("40 days"));

echo "date after modify date1 =>" . date_format($date,"Y-m-d");
?>

标签: phpdate

解决方案


在 PHP 中对象是通过引用传递的。因此,当您将对象分配给新变量时,两个变量都引用同一个对象。为避免这种情况,您需要clone第一个对象:

$date1 = clone $date;

你的代码:

$date=date_create("2013-03-15");
echo "date =>" . date_format($date,"Y-m-d");
echo " ******** ";
$date1= clone $date;
date_add($date1,date_interval_create_from_date_string("40 days"));
echo "date after modify date1 =>" . date_format($date1,"Y-m-d");

演示

您也可以通过使用DateTimeImmutable()which 在修改时返回一个新DateTimeImmutable对象来避免这种情况,因此不需要克隆:

$date = new DateTimeImmutable("2013-03-15");
echo "date =>" . $date->format("Y-m-d");
echo " ******** ";
$date1 = $date->add(date_interval_create_from_date_string("40 days"));
echo "date after modify date1 =>" . $date1->format("Y-m-d");

演示


推荐阅读