在PHP檢查此不言自明的代碼:如何在沒有修改過程的情況下獲得Carbon實例的開始和結束年份?
現實:
$dateTime = Carbon::createFromDateTime(2017, 2, 23);
echo $dateTime; // 2017-02-23 00:00:00
echo $dateTime->startOfYear(); // 2017-12-31 23:59:59
echo $dateTime; // 2017-12-31 23:59:59
注意,在第四行中,$dateTime
值爲2017-12-31 23:59:59
。那是因爲在第三行。
但是爲什麼?我知道,碳的startOfYear()是一種改性劑,但是我們怎麼能因此獲得當年的一個日期的開始,而無需修改本身
預計:
$dateTime = Carbon::createFromDateTime(2017, 2, 23);
echo $dateTime; // 2017-02-23 00:00:00
echo $dateTime->startOfYear(); // 2017-12-31 23:59:59
echo $dateTime; // 2017-02-23 00:00:00
以上,請注意4號線。實際上,第四行輸出2017-12-31 23:59:59
。
您正在對碳實例應用修飾符。您需要首先將其緩存在其他一些變量中,然後在那裏執行。這確保您的原始安全。所以'$ modifiedDate = $ dateTime; $ modifiedDate-> startOfYear();' –
這將是昂貴的你。這樣做需要重新創建每個操作的同一日期的相同實例:可能會在該日期開始一年,然後得到月底,月初,一天的開始,一天的結束等。是不是任何其他更優雅的方式? – doncadavona
不錯,檢查下面的答案。 – doncadavona