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