簡體   English   中英

PHP DateTime - 修改引用

[英]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-15 2012-04-15 ...

上述功能的結果:2012-03-01 2012-04-01 ...

您已經傳遞了對DateTime對象的引用。 無需將DateTime實例作為引用隱式傳遞。 如果需要DateTime對象的副本,則需要使用clone關鍵字。

就結果而言,它在每個連續月份的15次迭代,讀取代碼,我預計將是結果。

我的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);
    }
?>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM