2012-02-05 42 views
1

好的,現在!

echo date('r', strtotime('10.01.11')); 

打印:孫,2012年2月5日10時01分11秒

預計:星期一,2011年1月10日00:00:00

如何強制strtotime()將輸入字符串解析爲僅限日期?我必須以不同格式轉換一堆日期。 DateTime::format不是一個選項,因爲我不知道腳本會遇到的所有格式,甚至沒有安裝在服務器上(我沒有權限執行此操作)。

試圖
strtotime('day 10.01.11')
strtotime('10.01.11 00:00:00')
strtotime('10.01.11 midnight')
- 毫無效果。

任何幫助非常感謝

回答

1

正在修改輸入一個選項嗎?

$str = '10.01.11'; 
$str = str_replace('.', '/', $str); 

echo date('r', strtotime($str)); 

然而,這仍然會輸出Sat, 01 Oct 2011 00:00:00,根據MM.DD.YY圖案(美國標準)。


編輯:根據您的使用,則可以考慮創建正則表達式模式的列表,並相應地解析日期。這樣做的代碼很難打開到全部的可能性。

+0

得到了相同的想法,但用'-'代替'/',因爲那會自動將日期變成美國格式。不幸的是,這也不起作用:'strtotime('01-10-11')'返回_Thu,2001年10月11日。 – 2012-02-05 21:53:13

+0

@ Czechnology的編輯:是的,我想是這樣... – 2012-02-05 21:59:26

0

我不認爲strtotime知道如何解析這些日期。爲避免潛在的歧義,最好使用ISO 8601(YYYY-MM-DD)日期。

+0

是的,我知道,謝謝,但這一次它真的不依賴於我。 – 2012-02-05 21:44:04

1

默認情況下,您爲什麼不將時間設置爲00:00:00? 例如

echo date('D, d M Y H:i:s', strtotime('10.01.11')); 

還的strtotime採用美國日期格式,所以這將轉化爲2011年10月它更容易使用ISO日期格式的第一個

+0

試過,謝謝。 'strtotime()'返回** false ** – 2012-02-05 21:44:43

+0

編輯代碼 – clem 2012-02-05 21:47:41

+0

我相信'date()'函數的_ $ format_參數不會影響'strtotime()',是嗎? – 2012-02-05 21:58:14

1

測試,這個工程:

$date = DateTime::createFromFormat('d.m.y', '10.01.11'); 
echo $date->format('r'); 

http://codepad.viper-7.com/OH7Kyn

+0

OP表示他不想使用明確格式必須指定的方法。 – Czechnology 2012-02-05 21:46:05

+0

1.我沒有DateTime,我無法安裝它2.格式不是靜態的。請仔細閱讀問題。但是,無論如何,您的解決方案可能對其他人有用。 – 2012-02-05 21:48:10

2

如何強制strtotime()將輸入字符串解析爲僅限日期?

你不知道。 strtotime使用very well-defined parsing formats。它所產生的完全取決於你給它的東西。

'10.01.11'被解析爲a time format,因爲它將總是解釋由時段分隔的三對數字作爲時間。它會識別日期when separated by dashes, slashes or spaces。令人惱火的是,日期格式頁面上有一個使用點的例子,但似乎沒有一種確定的方式來解析日期而不是時間解析。嘆氣,PHP。

如果您需要將特定格式解釋爲日期而不是時間,那麼您有兩種選擇。

首先,您可以使用不同的日期解析方法。如果預期的格式從未改變,則可以使用DateTime::createFromFormat()或可怕的strptime。你已經在評論中表示,格式會有所不同,並且你的PHP版本已經足夠老,不會有DateTime,所以這可能不適合你。

其次,您可以預處理數據。至少在這個例子中,./的轉換可能會訣竅,但10/01/11可能作爲人類的日期不明確。有一點正則表達式可以確定如何最好地處理數據,這沒什麼錯。

還有第三種選擇:如果你從用戶那裏獲得這些信息,讓你的應用程序開始強制用戶以正常的,一致的,可解析的格式輸入日期。訓練用戶使用YYYY-MM-DD可能需要一些時間,但它可能是最爲理智的長期投注。

+0

是的。 「01-10-11」被解釋爲「2001-10-11」。正則表達式預處理將是我唯一的選擇,我猜。 – 2012-02-05 22:06:07

相關問題