我有表達日期的一個標準的「美」的方式 - 1967年6月29日或67年6月29日PHP日期格式 - 我對於準備碰壞
strtotime()
和create_date()
和date()
或date_format()
所有這一切都窒息。
db是MySQl--存儲日期爲yyyy-mm-dd
。
不幸的是,我不能改變我的模式來存儲我的日期作爲時代的時間戳或整數。
我有表達日期的一個標準的「美」的方式 - 1967年6月29日或67年6月29日PHP日期格式 - 我對於準備碰壞
strtotime()
和create_date()
和date()
或date_format()
所有這一切都窒息。
db是MySQl--存儲日期爲yyyy-mm-dd
。
不幸的是,我不能改變我的模式來存儲我的日期作爲時代的時間戳或整數。
這將您的標準轉換日期數據庫需要的格式。
date('Y-m-d', strtotime('06/29/1967'));
我不知道如果我理解你的問題很好,但你可以使用的date
和mktime
功能的組合,這樣的:
echo date('Y-m-d', mktime(0, 0, 0, month, day, year));
這是我一直在跟我做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"))
其實@Ramy Deeb回答了我將要做的同樣的事情,strtotime會轉換成一個UNIX時間戳,幾乎所有你扔在它上面的日期都會變成你需要的東西。
要檢查什麼的strtotime可以處理,你可以檢查the date formats for strtotime或full documentation for acceptable formats
那麼你可以使用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');
並將其插入到數據庫中。
請考慮修改您的問題。 SO是用於問答,而不是用於咆哮。雖然我們很樂意提供幫助,但如果您不清理問題,很可能您的問題會被解決。記住,我們希望SO上的問題能夠獨立存在並對其他人有用(更不用說容易找到)。查看[此鏈接](http://stackoverflow.com/questions/how-to-ask)尋求幫助。 –
只需獲得該程序並使用時間戳。我不確定你對他們有什麼反對,但除非你有特殊原因不使用它們,否則你應該。 – regality
roger那Drackir - 和嚴肅的規範性,我沒有控制結構,這是爲什麼我提到不提供解決方案,包括結構變化。我應該改變一個數據類型來使用PHP ... – jpmyob