PHP 日期时间 - 修改引用


PHP DateTime - modify reference

我正在尝试修改作为引用传递的函数中的 DateTime 对象:

<?php
$date = new DateTime('2012-02-12');
for($n1 = 0; $n1 < 10; $n1++) {
    $date->modify('first day of next month');
    setDate($date, 15);
    echo $date->format('Y-m-d') . "<br />'n";
}
function setDate(&$date, $day) {
    $date->setDate($date->format('Y'), $date->format('m'),  $day);
}
?>

但结果并不像预期的那样。我这个参考资料有问题吗?

编辑:预期成果:2012-03-152012-04-15...

具有上述函数的结果:2012-03-012012-04-01...

我的 PHP 不喜欢"嵌套月的第一天"位,但使用"+1 个月"。既然你绝对设定了这一天,我就不担心它不在第一个。或者,如果需要,您可以在进入循环之前将其设置为第一个。

所以,这对我有用。我添加了new DateTimeZone('America/New_York'),这样它就不会再纠缠我未设置它(共享服务器)。并删除了通过引用传递(&)位,因为现在所有对象在PHP中默认都是通过引用传递的。

<?php
    $date = new DateTime('2012-02-12',new DateTimeZone('America/New_York'));
    for($n1 = 0; $n1 < 10; $n1++) {
        $date->modify('+1 month');
        setDate($date, 15);
        echo $date->format('Y-m-d') . "<br />'n";
    }
    function setDate($date, $day) {
        $date->setDate($date->format('Y'), $date->format('m'),  $day);
    }
?>

您已经在传递对 DateTime 对象的引用。无需隐式传递 DateTime 实例作为引用。如果需要 DateTime 对象的副本,则需要使用 clone 关键字。

就结果而言,它在每个连续月份的第 15 个迭代中,阅读代码,我预计会是结果。