2012-05-31 56 views
3

我有以下難看的代碼將日期字符串轉換爲另一個日期字符串。在六月/七月mktime生成錯誤的奇怪行爲

//$invDate starts as a date string in format dd/mm/yyyy 
$dateArray = explode('/', $invDate);  
$invDate = $dateArray[0] .' '. date("F",mktime (1,1,1,$dateArray[1])) .' '. $dateArray[2]; 

我不是特別自豪,但它產生的一個國家,包括美國和英國這樣做的日期方法可以產生混亂的明確的日期。

它工作得很好了好半天,然後今天突然它已經開始轉向

01/06/2012 

1 July 2012 

我已經看了mktime的行爲,並不能看到任何理由mktime (1,1,1,6)應該在七月份生成一個日期。有任何想法嗎?

+0

我要補充的是,漂亮的很明顯,我可以創造個月的陣列,而不是使用mktime,但我很感興趣,看看如果我犯了一個錯誤,或者它是一個錯誤。 – fred2

回答

5

這是因爲mktime默認爲缺少字段的當前時間。由於你沒有指定一天,今天是May 31st它假設June 31,它不存在,所以它包裹到七月。通過增加第五個參數mktime指定日期:

date("F", mktime(0, 0, 0, $dateArray[1], 1))