2016-07-31 43 views
1

:: createFromFormat()的結果是領先一月份:碳createFromFormat意想不到的結果

var_dump($_GET['archive']); 
var_dump(Carbon::createFromFormat('m/Y', $_GET['archive'])); 

結果:

string '11/2015' (length=7) 
object(Carbon\Carbon)[160] 
    public 'date' => string '2015-12-01 10:38:41.000000' (length=26) 
    public 'timezone_type' => int 3 
    public 'timezone' => string 'Europe/London' (length=13) 
+0

我有同樣的問題,但隨着日期的時間而定。 '$ x = Carbon :: createFromFormat('Ym-d','2017-11-21');'用'2017-11-21 16:55'創建'$ x'(因爲它當前是我下午4點55分時間)。我希望(期望)它返回'00:00'的時間。如果你問我,那是錯誤的。格式化函數的要點是什麼,它不會將您的非指定格式語句歸零!?!? – cartbeforehorse

回答

0

看來,碳使用當前的日子,如果沒有提供。因此,

var_dump(Carbon::createFromFormat('m/Y', '10/2015')); 
var_dump(Carbon::createFromFormat('m/Y', '11/2015')); 

結果例如7月31日在

object(Carbon\Carbon)[156] 
    public 'date' => string '2015-10-31 11:03:10.000000' (length=26) 
    public 'timezone_type' => int 3 
    public 'timezone' => string 'Europe/London' (length=13) 
object(Carbon\Carbon)[138] 
    public 'date' => string '2015-12-01 11:03:10.000000' (length=26) 
    public 'timezone_type' => int 3 
    public 'timezone' => string 'Europe/London' (length=13) 

由於10月有31日但「11月31日實際上是12月1日」。

0

看來你剛剛不走運,因爲你是在每月的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日。

與掩模管道符號雖然,所有的未宣佈的時間變量(His)設置爲零,並設置爲1日期變量(dm),所以$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「日期」字段)讀取數據。

在地球上哪個程序員希望他們的計劃,假設缺少時間(或你的情況,日)輸入數據的組成部分,應該從運行時執行時間多久?這絕對是瘋狂的瘋狂。