目前,我試圖解析出消息收到時間戳的日期。我有月份和日期,但沒有指定年份。事件總是發生在最近的(人類)閱讀時間。它在大多數情況下很好地執行此操作:PHP - 解析字符串作爲過去的日期
$time = strtotime("Jan 2 8:38pm");
返回今年的日期,這是正確的。不幸的是,我得到的問題,當我嘗試,例如做:
$time = strtotime("Dec 31 8:38pm");
返回這還沒有發生的日期,並不會發生在今年所有的剩餘。很明顯,我的信息未來不會發送。我需要它返回去年12月31日。
平日,我有一個解決方案通過像這樣的工作日之前前面加上「最後」:
$time = strtotime("Last Saturday 8:38pm");
總是返回的最後一個星期六的時間。然而,在這裏嘗試做同樣的事情是行不通的:
$time = strtotime("Last Dec 31 8:38pm");
這將返回false。我知道1年遞減一個日期,我可以這樣做:
$time = strtotime("Dec 31 8:38pm -1 year");
這偉大工程,爲31月。然而,1月2日,現在將失敗:
$time = strtotime("Jan 2 8:38pm -1 year");
一個解決方案我想到的如果過去的日期過去了,那麼將從所得值中減去一年(86400 * 365)。但是,如果我們超過了閏年的二月份,這個結果將會失敗。在這種情況下,我們最終會有一天的時間。
我想出了迄今爲止最好的解決辦法是這樣的:
$time = strtotime($raw_time);
if ($time > time()) {
$time = strtotime($raw_time." -1 year");
}
這似乎有點浪費,使兩個調用的strtotime我知道可能不是一個非常有效的功能。這是最優雅的解決方案嗎?
是否有人知道strtotime中的一個選項,它強制日期在過去而不是在將來?
有沒有另一種方法來解析這些日期,我應該考慮?
效率對此很重要,因爲我將用它解析很多日期,但我還想要簡單易讀的代碼,以便以後能夠理解它。
http://php.net/manual/en/function.strtotime.php chk例子 – devpro
你不需要解析相同的字符串兩次。 'strtotime(' - 1 year',$ time)'也會這樣做。 –
我已經看了很多頁面。那是我看的第一個地方。我有點期待會有一個簡單的選擇。也許我忽略了它。我在頁面上搜索了「last」和「previous」,但仍然找不到任何東西。我也搜索過'strtotime date in past'這樣的東西,並沒有這樣的運氣。 – azoundria