2016-08-24 20 views
-1

我目前正在處理表單,管理員從3個下拉列表中選擇日期 ,並將僱員標記爲存在或不存在。如何將字符串值轉換爲日期

我的考勤表有以下幾列:

  • EMP_ID:整數
  • 日期:日期
  • 狀態:VARCHAR

我有3個下拉菜單中的HTML表單,一個每個用於YYYY,MM和DD選擇。我想將這些值作爲日期採集並將其插入表格中的日期列中。我怎樣才能做到這一點?我嘗試過在互聯網上搜索功能 ,但我無法有效地使用它們中的任何一個。

任何幫助將不勝感激。

+1

向我們展示您的代碼以及您嘗試的內容。你說你已經搜索過,沒有解決方案。但實際的解決方案非常簡單,如果你能更好地闡述你的問題,我們可以提供幫助。 – Phiter

+0

您是否嘗試過使用[strtotime](http://php.net/manual/en/function.strtotime.php)?它可以靈活地檢測來自各種字符串格式的日期。 – Cam

回答

2

由於日期將被插入到MySQL,所有這些與sprintf()strtotime()格式是完全不必要的。

MySQL中期望以下列格式的日期數據類型date and time literals

•作爲在任一 'YYYY-MM-DD' 的字符串或 'YY-MM-DD' 格式。允許使用「寬鬆的」 語法:任何標點字符都可以用作日期部分之間的 分隔符。例如,'2012-12-31','2012/12/31', '2012^12^31'和'2012 @ 12 @ 31'是等同的。

•作爲字符串,'YYYYMMDD'或'YYMMDD' 格式中沒有分隔符,前提是該字符串作爲日期有意義。例如, '20070523'和'070523'被解釋爲'2007-05-23',但'071332' 是非法的(它具有無意義的月份和日期部分),並且變爲 '0000-00-00'。

•作爲YYYYMMDD或YYMMDD格式的數字,前提是 數字作爲日期有意義。例如,19830905和830905是解釋爲'1983-09-05'的 。

剛剛生成MySQL中接受的格式之一,使用PHP中的表單輸入的簡單字符串連接,然後在插入sql語句中使用此數據作爲參數。

+0

它的工作原理是完美的。我將yyyy,mm和dd選擇連接起來,並插入值轉換爲表格中的日期列。 迄今爲止,您的解決方案一直是最有效和最簡單的一個..你搖滾! –

+0

如果上述答案幫助您解決了您的問題,請將其標記爲已接受,讓其他觀衆知道該問題已得到解答! – Shadow

1

你有沒有真的尋找可能的解決方案?有很多,其中:DateTimeDateTime::createFromFormat,或者如果你喜歡保持事情的過程:date_createdate_create_from_format將分別都做同樣的事情:

$date = new DateTime(
    sprintf('%s/%s/%s', $year, $month, $day) 
); 
echo $date->format('U');//get unix timestamp 

閱讀DateTime manual和細節相關的頁面。

如果你是後時間戳,如凸輪建議strtotime可能是你最好的選擇:

$timestamp = strtotime(
    sprintf('%s/%s/%s', $year, $month, $day) 
); 

根據字段類型,你會想在一個時間戳,或者一些格式化字符串,在這種情況下$date->format('Y-m-d H:i:s')帶或不帶H:i:s位是最有可能的候選

+0

與許多SQL系統一樣,MySQL更喜歡[ISO-8601'YYYY-MM-DD'格式](https://en.wikipedia.org/wiki/ISO_8601)。斜槓是美式風格,不是普遍的。鑑於原始值是以表單形式表示的,實際上沒有理由解析這些值,然後再將它們吐出來,只需使用'sprintf'來組合。 – tadman

+0

@tadman:斜槓並未被用作插入的值(最後,我實際上建議'Y-m-d H:i:s'作爲用於插入的最可能的格式)。我用斜槓作爲可能的格式來解析日期。 OP表示日期值來自3個不同的輸入字段,所以他可能會想將它們放在一起。我知道,有100%的確定性,'Y/m/d'格式在與'DateTime'一起使用時是可以理解和可預測的,我並不建議使用這種格式作爲(My)SQL –

+0

三個獨立的字段對我來說聽起來像三單獨的變量進來,所以將它們與斜槓一起粉碎看起來像是一個巨大的時間浪費*除非*您正在進行某種日期驗證。我在這裏沒有看到,所以使用DateTime是無關緊要的。爲什麼不跳到你做sprintf的部分('%4d-%02d-%02d',$ year,$ month,$ day)'? – tadman