2011-08-04 134 views
2

我在我的HTML表單上有一個字段,要求用戶輸入日期爲dd/mm/yyyy。然後我運行一個PHP腳本將數據保存到mySQL數據庫,或者如果我能解決日期格式的問題。MySQL日期格式

我知道默認情況下,mySQL數據庫將日期保存爲yyyy-mm-dd,但是有人可能會告訴我,我該如何繼續保持用戶輸入日期格式爲dd/mm/yyyy,但是當它命中時數據庫正確地轉換爲mySQL日期格式。

回答

1

使用PHP來運行您的格式。在您將其插入到數據庫,重新格式的數據爲MySQL:

$mydate = new DateTime($userdate); 
$mydate = $mydate->format("Y-m-d"); 

如果需要從數據庫中獲取它,只是更改日期格式回以類似的方式。

+1

非常感謝您花時間回覆並提供您的建議,非常感謝。我必須承認在PHP和mySQL方面是非常新的,並且我已經看到了我需要做的日期數據,這不是什麼大問題。由於這個原因以及我目前缺乏知識,我決定將數據保存爲VARCHAR。我知道這可能不是保存信息最聰明的方式,但目前它會適合我的需求,直到我獲得更多的經驗。再一次,非常感謝您的時間和麻煩。問候克里斯 – IRHM

1

我也遇到過這個問題。我的解決方案是將用戶輸入的字符串轉換爲Unix時間戳,然後使用PHP date()函數將其轉換爲符合MySQL的格式。

要將字符串轉換爲Unix時間戳,可以使用strtotime,或者如果您熟悉面向對象編程DateTime::createFromFormat工廠函數。從我的經驗:strtotime將做工作。

現在您需要將您返回的時間戳轉換回MySQL格式。這很簡單:

$sqldate = date("Y-m-d", $timestamp); 
+1

'strtotime'只支持一個相當有限的日期範圍(「它將做這項工作」是不夠的),'DateTime'具有程序多樣性。 –

0

試試這個:

php > list($d,$m,$y) = explode("/","28/04/2011"); 
php > echo date("Y-m-d",mktime(0,0,0,$m,$d,$y)); 
2011-04-28 
0

您可以通過創建一個簡單的功能做到這一點 - 這樣的事情,例如:

function convertDate2Sql($date = null) { 
    if (!empty($date)) { 
     $date = explode("/", $date); 
     return implode("-", array_reverse($date)); 
    } 
} 

顯然,你必須確保,如果您使用的是不同的日期格式,即美國的一個月前有一個月,那麼你必須在使用explode()函數後手工重新排列$ date數組內的值,但是如果它的格式與上面所述的相同,那麼使用array_reverse ()會做到這一點。

0

我發現了一個jquery,允許我設置日期的格式,使我能夠設置存儲在我的數據庫中的數據的標準。