看來你剛剛不走運,因爲你是在每月的31號測試。
然而,這是(顯然)一個記錄功能。請參閱:http://php.net/manual/en/datetime.createfromformat.php
如果您設置的格式掩碼「正確的」,它可以作爲你所期望的。
$x = Carbon::createFromFormat ('m/Y', '04/2009');
$y = DateTime::createFromFormat ('m/Y|', '04/2009');
dd ($x, $y);
爲了避免混淆,Carbon
功能僅僅是爲PHP的底層DateTime
函數的包裝;我只是想要證明這不是導致我們頭痛的Carbon
功能。
如果您在本月31日進行測試,上面的$x
將被讀取爲31 April 2009
,將顯示爲5月1日。
與掩模管道符號雖然,所有的未宣佈的時間變量(H
,i
,s
)設置爲零,並設置爲1日期變量(d
,m
),所以$y
將始終作爲迴應你期望不管一週中的哪一天。
對我來說,在本月4日一天的晚上17:46進行測試時,上面的代碼產生以下:
Carbon @1233769590 {#219 ▼
date: 2009-02-04 17:46:30.0 Europe/London (+00:00)
}
DateTime @1233446400 {#217 ▼
date: 2009-02-01 00:00:00.0 Europe/London (+00:00)
}
這在我看來是一個非常奇怪的實施日期/時間功能。您想要使用此函數的唯一真實世界的情況是,如果您正在從外部源(例如XML「日期」字段)讀取數據。
在地球上哪個程序員希望他們的計劃,假設缺少時間(或你的情況,日)輸入數據的組成部分,應該從運行時執行時間多久?這絕對是瘋狂的瘋狂。
我有同樣的問題,但隨着日期的時間而定。 '$ x = Carbon :: createFromFormat('Ym-d','2017-11-21');'用'2017-11-21 16:55'創建'$ x'(因爲它當前是我下午4點55分時間)。我希望(期望)它返回'00:00'的時間。如果你問我,那是錯誤的。格式化函數的要點是什麼,它不會將您的非指定格式語句歸零!?!? – cartbeforehorse