2013-06-03 64 views
2

我可以在這兩種情況下,如下相約對象從字符串:PHP日期時間字符串分化

$dt = strtotime("2013-04-19 17:00:00"); 
//or 
$dt = strtotime("10 hours"); 

我需要一種方法,讓我可以在這兩個日期類型之間的區別,無論是相對還是絕對數據字符串。

任何可能的解決方案或線索請嗎?謝謝。

+3

*的strtotime()*可能會有所不同? –

+0

我有點困惑的問題,但如果你正在尋找一種方式來知道它的相對與否,你可以使用一些正則表達式 –

+1

區分需要使用正則表達式的兩個不同的輸入值。 –

回答

4

你可以使用不同的第二參數strtotime。

if(strtotime($val) == strtotime($val, 0)){ 
    //date is absolute 
} else { 
    // date is relative 
} 

2013-04-19 17:00:00永遠是2013-04-19 17:00:00無論何時開始時間的。

10 hours結果將取決於什麼的現在值

+0

偉大的解決方案,我想,謝謝:) – Rana

+0

嗨,只是另一個問題。如果我使用strtotime(「16:00:00」,0),結果是1970年代的16:00:00,當然,「16:00:00」應該是一個絕對時間,今天的時間,對吧?你有什麼建議可以從中恢復?謝謝。 – Rana

+0

0作爲第二個參數是unix時代(1969年12月31日12:00),如果你想要相對於今天的日期,那麼就省略最後一個參數。 '的strtotime( 「十六點00分00秒」); – Orangepill

4

這不完全清楚自己想要什麼,但如果strtotime()功能並不能幫助一個簡單的正則表達式可以工作:

$regex = "/^\d{1,2} hours$/"; 

$type = (preg_match($dt, $regex) ? "relative" : "absolute"); 

只是表現了我的頭頂部,它可以被提煉了很多更好((hours|minutes|seconds)什麼的)。

還值得注意的是,這種定製是典型的糟糕設計。 strtotime()聽起來像是正確的答案。

+3

我在印象之下@Rana正在尋找一種方法來知道在* strtotime()被使用後,初始字符串*是*絕對還是相對*(這可能不可能) –

+0

感謝steve for the線索。然而,最後我用正則表達式來匹配日期而不是像「/(\ d {2,4}) - (\ D *) - (\ d {2})/」這樣的時間,並且看起來正在工作。 – Rana