2010-11-02 122 views
3

任何人都可以得到我隱藏字符串中時間戳的代碼。 我用這個代碼從字符串獲取日期 假設從字符串中刪除時間戳

$date_string = "02/06/2011 11:00 am - 2:00 pm"; 

$date = strtotime($date_string); 
$date = date('m/d/y', $date); 

但出來把我得到的是這樣的

1/1/70 

請建議我可以實現更好的方法這個工作 我想讓它顯示像

02/06/2011 
+0

是date_string隱藏嗎?你爲什麼不分享它? – nerkn 2010-11-02 09:20:35

+0

如果您首先添加字符串包含的內容,那將會很好。 – Shikiryu 2010-11-02 09:22:57

+0

,看看你如何輸出最終的$ date值 – heximal 2010-11-02 09:26:24

回答

4

如果你正在尋找的日期已經是字符串中,所有你想要做的是去除時間範圍內,你不需要任何日期操作。刪除空格後的所有內容(假設date_string的格式保持一致)。

$date_string = "02/06/2011 11:00 am - 2:00 pm"; 
$date = explode(" ",$date_string); 
echo $date[0]; 

或者更簡單(但未經測試)

echo strtok($date_string," "); //http://codepad.org/Or1mpYOp 

PHP.NET:strtok

PHP.NET:explode

+1

你贏得一行:'echo $ date [0];'我認爲這是最好的解決方案。當然,它取決於'$ date_string'的來源以及他是否可以控制其格式。 – Shikiryu 2010-11-02 09:58:00

+1

哦和:http://codepad.org/KAec6ehi爲OP – Shikiryu 2010-11-02 10:02:32

+0

這很好。感謝您的鏈接!書籤.... – 2010-11-02 10:09:20

3
$date = strtotime($date_string); 
$date = getdate($date); 
$date = $date['mon'] . '/' . $date['mday'] . '/' . $date['year'] 
+0

將日期返回爲'1/1/1970' – 2010-11-02 09:33:07

+0

此解決方案適用於我。 – 2013-12-17 15:56:36

+0

意識到這是因爲我使用了一個真實日期字符串,而不是日期範圍字符串中提供的問題 – 2013-12-17 16:14:53

1

如果02/06/2011 11:00 am - 2:00 pm是什麼得到顯示,您顯然顯示$date_string而不是$date,因爲strtotime('02/06/2011 11:00 am - 2:00 pm');返回布爾值false,其中date('m/d/y', $date)將轉換爲01/01/1970

嘗試這樣的事情

$date_string = "02/06/2011 11:00 am - 2:00 pm"; 
$date_exploded = explode('-',$date_string); 

$date = strtotime($date_exploded[0]); 
$date = date('m/d/y', $date); 
echo $date; 
+0

得到「01/01/70」 – 2010-11-02 09:36:23

+0

不知道爲什麼。在這裏,這個代碼呼應'02/06/11' – Mchl 2010-11-02 11:40:03

0

撇開的東西是要在日期解析非常錯誤的事實,你需要意識到使用00/00/00 [00]的日期格式是相當模糊的 - 在這樣寫的美國日期格式爲mm/dd/yy [yy] whi在英國它被解釋爲dd/mm/yy [yy]。 strtotime函數不使用區域設置來確定哪個適用,並始終假定前者。

如果我被要求解析這個,我會使用preg來提取日期部分。使用圖案:

/([0-9]{1,2})\/([0-9]{1,2})\/([0-9]{2,4})/ 

給出了一個陣列

0=> 02/06/2011 
1=> 02 
2=> 06 
3=> 2011 

然後使用mktime來生成UNIX timstamp。

其他方法包括使用substr來提取一個固定長度的字符串,或利用空間來獲取單詞。

0

如果你的字符串已經是日期。

$ date = substr($ records [$ datetime,0,10);