2013-10-27 51 views
2

我有一個有varchar類型的數據庫列的有效日期,所有數據庫列在d/m/y格式。然後,當我嘗試將它轉換爲帶strtotime函數和日期格式的日期格式時,我得到01/01/70。我甚至嘗試用純字符串值替換數據庫結果。 我已經搜查,發現該鏈接 PHP strtotime returns a 1970 date when date column is null PHP : strtotime() returns always 01/01/1970 strtotime() does not return correct value when specifying date in dd/mm/yyyy format 但由於數據不爲空,它是格式無效兩人都沒有幫助。這裏是我的代碼片段strtotime函數返回01/01/70與有效輸入

if(isset($item['prep_date']) && $item['prep_date'] != NULL){ 
    $trial=$item['prep_date']; 
    echo ": ".$trial; 
    $prepDate= strtotime($trial); 
    $prepDate = date('d/m/y', $prepDate); 
    echo "= ".$prepDate; 
} 

我在想什麼?下面是兩個回波

28/11/13= 01/01/70: 28/11/13= 01/01/70: 28/11/13= 01/01/70: 03/01/13= 01/03/13: 28/11/13= 01/01/70: 28/11/13= 01/01/70: 18/11/13= 01/01/70: 28/11/13= 01/01/70: 28/11/13= 01/01/70: 02/09/13= 09/02/13: 28/11/13= 01/01/70: 28/11/13= 01/01/70: 28/11/13= 01/01/70: 28/11/13= 01/01/70: 28/11/13= 01/01/70: 28/11/13= 01/01/70: 28/11/13= 01/01/70: 28/11/13= 01/01/70: 28/11/13= 01/01/70: 05/11/13= 11/05/13: 28/10/13= 01/01/70: 28/11/13= 01/01/70: 05/11/13= 11/05/13: 28/10/13= 01/01/70: 28/10/13= 01/01/70: 28/11/13= 01/01/70: 28/11/13= 01/01/70: 05/11/13= 11/05/13: 11/12/13= 12/11/13: 11/12/13= 12/11/13: 28/11/13= 01/01/70: 28/11/13= 01/01/70: 11/12/13= 12/11/13: 28/11/13= 01/01/70: 28/11/13= 01/01/70: 28/11/13= 01/01/70: 28/11/13= 01/01/70: 28/11/13= 01/01/70: 28/11/13= 01/01/70: 28/11/13= 01/01/70: 30/01/14= 01/01/70 
+3

你可以請echo或var_dump($ item ['prep_date'])併發布結果? – Ryan

+3

'28/11/13'被視爲「第28個月的第11天」(從03/01/13 = 01/03/13結果來看,這對你來說並不明顯)。如果你想'天一個月'的訂單 - 使用點,而不是斜線 – zerkms

+0

是的,使用4位數字的年份也是一個非常好的習慣 – Ryan

回答

5

你1970年獲取的價值,因爲你strtotime()返回false結果:

var_dump(strtotime('28/11/13')); # false 

看看supported date and time formats。假設這是美國的月份,日期和年份(mm/dd/yyyy),像它說的here

如果inputed格式dd/mm/yyyy那麼最簡單的方法是使用DateTime::createFromFormatstrtotimestr_replace('/', '.', 'dd/mm/yyyy');,使其歐洲日期格式dd.mm.yyyy

+0

op's是2位數年份,DateTime還會處理嗎? – Ryan

+1

@Ryan:它甚至會處理1位數字。請參閱[美國格式的標準格式](http://www.php.net/manual/en/datetime.formats.date.php)。說明=「美國的月,日,年」; format ='mm「/」dd「/」y';例子=''12/22/78「,」1/17/2006「,」1/17/6「'。 –

+0

這是更簡單的解決方案 – altsyset