2008-12-11 18 views
6

我有一個MySQL表依賴於相同的日期的條目進行排序和篩選網站的各個部分的Unix時代的時間戳。我試圖實現一個日期選擇器,它將以mm/dd/yyyy格式將日期輸入到表單字段中。我一直在努力將該日期轉換爲unix時代格式,以在行字段中添加該條目。我所做的所有嘗試都導致生成當前日期時間戳。有沒有人有任何想法,我可以如何採取這種日期格式,並轉換爲相當的時代時間戳?mm/dd/yyyy格式與時代與PHP

在此先感謝。

其他信息:

我一直在努力mktime,和我得到的是今天的時代。道歉,我應該補充一些代碼更早更好地解釋:

表單ID是「日期」的數據庫字段是「劃時代」

這裏是我想要什麼(失敗)當我發佈日期:

$epochhold = ($_POST['date']); 
$epoch = mktime(0,0,0,$epochhold); 

我從以前的帖子明白,這還是可以將值MM/DD/YYYY,而不是毫米,DD,YYYY爲mktime預期,但後沒有提供,並就如何解決去做。我嘗試了str_replace將「/」更改爲「,」並得出了相同的結果 - 獲取今天的時代日期,無論輸入的日期如何。

下面是一個代碼示例 - 這同樣沒有工作,但我把它添加到幫助說明我已經試過

$epochhold = ($_POST['date']); 
$epochold2 = str_replace('/', ', ', $epochhold) 
$epoch = mktime(0,0,0,$epochhold2); 

感謝之前的響應,以及,我不想快回復不被注意!

謝謝大家!

感謝大家的回覆 - strtotime似乎在最初的測試中效果最好,並且可能是這種格式在整個網站中一致的方式。但所有的建議都有助於這一點,所以再次感謝大家!

+0

你將不得不解析epochhold $爲3個變量,然後通過所有三個地mktime。你不能只傳遞一個參數,並期望PHP將它分成三個參數!我建議split()函數。 – 2008-12-11 17:15:27

回答

9

如果您知道它將始終採用該格式,strtotime會將其直接轉換爲unix時間戳。

strtotime($_POST['app_date']); 

HTH!

+0

此外,不要忘記驗證輸入:strtotime('15/05/2008')是`FALSE`,而不是`1210802400`。 – Piskvor 2008-12-11 16:50:12

2

您應該看看mktime()函數。加上正則表達式或strtotime(),你就可以擁有它。

0
if (! preg_match('#\d{2}/\d{2}/\d{4}#', $_POST['date'])) { 
    // complain about invalid input 
} 

list($m, $d, $y) = explode('/', $_POST['date']); 
$timestamp = mktime(0, 0, 0, $m, $d, $y); 
0

你需要將dd,mm,yyyy作爲單獨的變量發送給mktime。它將$ epochold2中的值作爲一個對mktime無效的字符串。

最好的辦法是使用strtotime,正如我以前所述,或者使用mktime遵循Ant P的建議。

0

strtotime()將解析任何日期格式並返回Unix時間戳。所有您需要做的是通過它你的日期/時間字符串:

$unix_time = strtotime($_POST['date']); 
if($unix_time < 0) { 
    //error case 
} 
else { 
    //value OK! 
} 

正如你可以在上面看到,你甚至可以用它來幫助驗證輸入 - 如果用戶輸入一個日期像2008年2月31日,它會返回-1。