php - DateInterval 不添加日期并且没有错误?
问题描述
我正试图将假期一分为二,因为中间有一个日期。
$splitdate = new DateTime($_POST['date']);
// Split date = 2020-08-04
$holiday1end = $holiday2start = $splitdate;
$holiday1end->sub(new DateInterval('P1D'));
$holiday2start->add(new DateInterval('P1D'));
echobr("Holiday 1: ".$holiday1end->format("Y-m-d"));
echobr("Then " . $splitdate->format("Y-m-d"));
echobr("Holiday 1: " . $holiday2start->format("Y-m-d");
这是我得到的输出:
Holiday 1: 2020-08-04
Then 2020-08-04
Holiday 1: 2020-08-04
这没有任何意义,最初我将 DateInterval 设置为“P1D”,但这没有用,所以我尝试删除两天,但我仍然没有得到任何更改或错误。我在这里做错了什么?
为清晰而编辑:$holiday1end 应该比 $splitdate 少一天,$holiday2start 应该比 $splitdate 多一天,但它们都没有改变。
解决方案
似乎当你这样做时,
$splitdate = new DateTime('2010-12-31');
$holiday1end = $holiday2start = $splitdate;
object in 的实例$splitdate
作为对其他变量的引用传递。并且由于您sub
跟踪和add
学习相同的天数,因此代码似乎无法正常工作。然而,它工作正常,但由于同一对象的共享/引用实例,所有效果都指向同一个对象。
但是,如果您执行以下操作,您会注意到日期增加了 1 天(基本上减去 2 天,然后添加 3 天)。
$date = '2010-12-31';
$splitdate = new DateTime($date);
$holiday1end = $holiday2start = $splitdate;
$holiday1end->sub(new DateInterval('P2D'));
$holiday2start->add(new DateInterval('P3D'));
echo "Holiday 1: ".$holiday1end->format("Y-m-d")."\n";
echo "Then " . $splitdate->format("Y-m-d")."\n";
echo "Holiday 2: " . $holiday2start->format("Y-m-d")."\n";
如果你分离DateTime
对象实例,你会得到你想要的结果。
$date = '2010-12-31';
$splitdate = new DateTime($date);
$holiday1end = new DateTime($date);
$holiday2start = new DateTime($date);
$holiday1end->sub(new DateInterval('P2D'));
$holiday2start->add(new DateInterval('P2D'));
echo "Holiday 1: ".$holiday1end->format("Y-m-d")."\n";
echo "Then " . $splitdate->format("Y-m-d")."\n";
echo "Holiday 1: " . $holiday2start->format("Y-m-d")."\n";
推荐阅读
- reactjs - 单击下一步按钮时自动完成功能正在重置
- javascript - javascript中的数字字符串值比较问题
- python - Matplotlib 从 Dataframe 中的一列绘制不同的线
- python - 如何强制 setup.py 包含 `__init__.py` 文件并使我的包可导入?
- swift - 为什么@State 值没有更新
- java - 如何使用 Selenium 和 Java 从 3 个具有相同类名和不同值的互连下拉列表中选择选项
- python - 在 pyglet 中不使用装饰器会导致问题吗?
- c - 为什么用 char 而不是 unsigned int 对图像的像素进行建模?
- angular - 如何将元素推送到可观察和更新 UI
- c - 为什么我的程序不打印 switch case 之后的代码?它在 switch case 执行后结束,就是这样