我在我的HTML表單上有一個字段,要求用戶輸入日期爲dd/mm/yyyy。然後我運行一個PHP腳本將數據保存到mySQL數據庫,或者如果我能解決日期格式的問題。MySQL日期格式
我知道默認情況下,mySQL數據庫將日期保存爲yyyy-mm-dd,但是有人可能會告訴我,我該如何繼續保持用戶輸入日期格式爲dd/mm/yyyy,但是當它命中時數據庫正確地轉換爲mySQL日期格式。
我在我的HTML表單上有一個字段,要求用戶輸入日期爲dd/mm/yyyy。然後我運行一個PHP腳本將數據保存到mySQL數據庫,或者如果我能解決日期格式的問題。MySQL日期格式
我知道默認情況下,mySQL數據庫將日期保存爲yyyy-mm-dd,但是有人可能會告訴我,我該如何繼續保持用戶輸入日期格式爲dd/mm/yyyy,但是當它命中時數據庫正確地轉換爲mySQL日期格式。
使用PHP來運行您的格式。在您將其插入到數據庫,重新格式的數據爲MySQL:
$mydate = new DateTime($userdate);
$mydate = $mydate->format("Y-m-d");
如果需要從數據庫中獲取它,只是更改日期格式回以類似的方式。
我也遇到過這個問題。我的解決方案是將用戶輸入的字符串轉換爲Unix時間戳,然後使用PHP date()
函數將其轉換爲符合MySQL的格式。
要將字符串轉換爲Unix時間戳,可以使用strtotime,或者如果您熟悉面向對象編程DateTime::createFromFormat工廠函數。從我的經驗:strtotime將做工作。
現在您需要將您返回的時間戳轉換回MySQL格式。這很簡單:
$sqldate = date("Y-m-d", $timestamp);
'strtotime'只支持一個相當有限的日期範圍(「它將做這項工作」是不夠的),'DateTime'具有程序多樣性。 –
The format of mysql is indeed 'YYYY-MM-DD'。
我建議類似如下(未經測試):
$userInput = '24/12/2004';
date('c', date_parse($userInput));
理智的事情是使用準備好的語句,並直接發送日期到事先準備好的聲明。唉,Php-MySQL prepared statements don't allow for a date type。
試試這個:
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
您可以通過創建一個簡單的功能做到這一點 - 這樣的事情,例如:
function convertDate2Sql($date = null) {
if (!empty($date)) {
$date = explode("/", $date);
return implode("-", array_reverse($date));
}
}
顯然,你必須確保,如果您使用的是不同的日期格式,即美國的一個月前有一個月,那麼你必須在使用explode()函數後手工重新排列$ date數組內的值,但是如果它的格式與上面所述的相同,那麼使用array_reverse ()會做到這一點。
我發現了一個jquery,允許我設置日期的格式,使我能夠設置存儲在我的數據庫中的數據的標準。
非常感謝您花時間回覆並提供您的建議,非常感謝。我必須承認在PHP和mySQL方面是非常新的,並且我已經看到了我需要做的日期數據,這不是什麼大問題。由於這個原因以及我目前缺乏知識,我決定將數據保存爲VARCHAR。我知道這可能不是保存信息最聰明的方式,但目前它會適合我的需求,直到我獲得更多的經驗。再一次,非常感謝您的時間和麻煩。問候克里斯 – IRHM