2010-12-17 76 views
0

我有一些數據(由用戶insered),如:的MySQL和PHP - 如何將字符串轉換爲DATETIME

  1. 10-12-2010
  2. XX-12-2010
  3. 10-XX-2010
  4. 10-12-XXXX

(請注意,我加XX(或XXXX),當數據沒有insered。)

我怎樣才能將這些字符串通過使用MySQL的語法DATETIME

感謝

UPDATE

$day=(is_numeric($_POST['day']) && $_POST['day'] > 0 && $_POST['day'] < 32) ? $_POST['day'] : '00'; 
$month=(is_numeric($_POST['month']) && $_POST['month'] > 0 && $_POST['month'] < 13) ? $_POST['month'] : '00'; 
$year=(is_numeric($_POST['year']) && $_POST['year'] > 1999 && $_POST['year'] < (date("Y")+1)) ? $_POST['year'] : '0000';    
$data=$year."-".$month."-".$day; 
$mysqlDate=date('Y-m-d', strtotime($data)); 
echo $mysqlDate; 

還有一個問題:如果數據是*空-12-2010" ,它打印2010-11-30爲什麼

+1

你不會得到這樣的數據丟失。你可以使用strtotime函數,但是它們不能很好地處理。內置函數都不會猜測缺少的部分是什麼。 – profitphp 2010-12-17 15:52:11

+1

您需要解決真正的問題,允許用戶輸入錯誤數據 - 強制他們從丟失列表中選擇日期是通常的做法。如果你允許文本的自由輸入,那麼你必須準備好爆炸和分析每個領域。這是可行的,除了你的情況#3 – Cups 2010-12-17 16:04:19

回答

1

如果你確定你不想要求所有日期字段,只需用零填補他們,如果他們不存在,就像這樣:

$month = ($_POST['month'] == '') ? '00' : $_POST['month']; 

否則,如果你」再擔心不是空白日期,但對非標準輸入,你可以這樣做:

$month = (is_numeric($_POST['month']) && $_POST['month'] > 0 && $_POST['month'] < 13) ? $_POST['month'] : '00' 

$date = date('Y-m-d G:i:s', strtotime($_POST['dataThatUserEntered']));

應該這樣做,不是嗎?

只要確保您驗證用戶輸入,否則如果他們進入瘋狂的東西,您可能會發現$date = '1970-01-01 00:00:00

+0

檢查代碼添加爲更新:)感謝您的時間 – markzzz 2010-12-17 16:07:38

+0

你不能把''放入mysql,把'00'或'01'。 – JakeParis 2010-12-17 16:11:08

+0

並且不要使用'd-m -Y',mysql的格式是'Y-m-d' – JakeParis 2010-12-17 16:11:55

1

?你可以使用php的strtotime函數。

的strtotime - 解析任何英文 文本的日期時間描述成 Unix時間戳

您應該檢查出來的那種格式的你可以用它來工作,你的字符串。

0

Mysql會自動進行轉換。你可以看到被接受的格式here。但你應該知道xxx並強制這些字段。

0

那麼,你可以使用date(),使用格式和字符串。

$mysqlDate = date('Y-m-d', $stringDate); 
+0

嚴格它不工作... – markzzz 2010-12-17 16:03:18

+0

第二個參數必須是一個時間戳而不是一個字符串。見http://php.net/manual/en/function.date.php – PiTheNumber 2012-08-01 13:01:18

1

還有一個問題:如果數據是*空-12-2010" 它打印2010- 11-30。

爲什麼? 因爲str totime的讀數爲00-12-2010,因爲它不存在,所以它將它轉換爲12月1日之前的一天,數字爲Dec 01,或者在11月30日重新生成!

+0

哦!我不會檢查每一天/每月/每年......這是浪費工作呃!任何修改來解決這個問題? – markzzz 2010-12-17 16:27:35

+0

首先,不要讓空洞的時間到達strtotime。用01替代數據,然後到達時間 – JakeParis 2010-12-17 16:29:53

+0

嚴正,但事實上,如果這是一個真實的數據,我不可能知道。 – markzzz 2010-12-17 16:33:36