2011-09-20 32 views
-3

我有表達日期的一個標準的「美」的方式 - 1967年6月29日或67年6月29日PHP日期格式 - 我對於準備碰壞

strtotime()create_date()date()date_format()所有這一切都窒息。

db是MySQl--存儲日期爲yyyy-mm-dd

不幸的是,我不能改變我的模式來存儲我的日期作爲時代的時間戳或整數。

+1

請考慮修改您的問題。 SO是用於問答,而不是用於咆哮。雖然我們很樂意提供幫助,但如果您不清理問題,很可能您的問題會被解決。記住,我們希望SO上的問題能夠獨立存在並對其他人有用(更不用說容易找到)。查看[此鏈接](http://stackoverflow.com/questions/how-to-ask)尋求幫助。 –

+0

只需獲得該程序並使用時間戳。我不確定你對他們有什麼反對,但除非你有特殊原因不使用它們,否則你應該。 – regality

+0

roger那Drackir - 和嚴肅的規範性,我沒有控制結構,這是爲什麼我提到不提供解決方案,包括結構變化。我應該改變一個數據類型來使用PHP ... – jpmyob

回答

1

這將您的標準轉換日期數據庫需要的格式。

date('Y-m-d', strtotime('06/29/1967')); 
0

這是我一直在跟我做PHP/MySQL的安裝:

創建日期對象:
$date = new DateTime(null, new DateTimeZone("UTC"));

保存日期DB:
$dateString = $date->format("Y-m-d H:i:s");

從DB取回日期:
$ retrieveDateString = $retrievedDate = new DateTime($retrievedDateString, new DateTimeZone("UTC"))

0

那麼你可以使用date_create_from_format這個如下:

$myDate = date_create_from_format('m/d/Y', '06/29/1967'); 

對於2位格式以下是格式,

$myDate2 = date_create_from_format('n-d-y', '6-29-67'); 

注意:上述日期被解釋爲2067年6月29日不是1967年6月29日因爲哦PHP對2位數字的解釋。我已經測試和PHP對待了幾年:

70 - 99 => 1970 - 1999 
00 - 69 => 2000 - 2069 

因此,我建議使用四位數年份格式。
但是,如果你不能改變的數據源,那麼對於像你這樣的,其中69是1969年的日期,我會在今年轉換之後按我自己的條件,像這樣:

// if the date is wrongly interpreted as 2000+, change it to 1900 one 
// here I have choosen range '38 - 99' as '1938 - 1999' 
if(date_format($myDate2, 'Y') > 2038) 
    date_sub($myDate2, date_interval_create_from_date_string('100 years')); 

你已經得到了$myDate後使用正確日期的對象date_format

$db_date_str = date_format($myDate, 'Y-m-d'); 

並將其插入到數據庫中。