2011-02-24 132 views
2

我試圖獲取下一個「本月第二個星期日」的時間戳,不管它是在當前月還是在下個月PHP strtotime - 獲取第二個最近的「本月第二個星期日」

需求是使用strtotime函數,只有一次,沒有第二個參數,沒有更多(這些約束來自遺留代碼)。
基本上PHP代碼來獲取一定是唯一的:

strtotime('_a_string_here_'); 

和字符串必須是一個通用的字符串。它不能包含'feb 2011'之類的東西。
基本上我可以放一個靜態字符串作爲strtotime函數的第一個參數。

我已經嘗試了所有的這些,但他們不給我我想要的(現在的日期是週四2011-02-24):
strtotime('second sunday') //返回「2011-03-06 00:00: 00'
strtotime('second sunday of the month ') // 1970-01-01 00:00:00
strtotime('+0 month second sun') //返回 '2011-03-06 00:00:00'

感謝,

+0

嘗試「第二個星期日」相對於「2001年2月1日」(第二個參數),但要小心,如果一開始的一天是星期日 – 2011-02-24 15:43:18

+0

對不起,我加我不能使用第二個參數。反正爲了得到2011-02-01,我需要調用另一個PHP函數(這是對約束) – dan 2011-02-24 15:47:18

+1

可能更改標題是「的strtotime」而不是「用strtolower」 – DTest 2011-02-24 16:08:00

回答

4

試試這個:

strtotime('+2 week Sunday') 

新建答案: 我想你期待的strtotime是太聰明瞭。通過不提供一個月的字符串或第二個參數,它只能假設'當前時間'。

對於像'本月的第二個星期日如果不是過去,否則下個月的第二個星期天'這樣的條件,沒有任何詞支持。

海事組織將類似這樣的東西添加到strtotime會使它太複雜,無法在正常操作中使用。正確的解決方案很可能是兩次打電話給strtotime(首先查看當前月份是否過去,僅當我們需要下個月才查看時間)。

我不知道爲什麼你的約束條件存在,但你應該開始研究如何改變約束條件。

+0

這是相同的解決方案powtac。不幸的是,每天都不工作,只有當一天超出了本月的第二個星期日 – dan 2011-02-24 16:09:51

+0

它不在下個月... – powtac 2011-02-24 16:09:56

+0

添加了一個新的答案,因爲目前的約束似乎不可能 – DTest 2011-02-24 16:39:54

1
// second sun next month 
strtotime('+0 month +2 week sun'); 
+1

該字符串必須是通用的,即沒有指定任何特定的日期。 – dan 2011-02-24 15:49:29

+0

我改成了代碼並提出瞭解決方案。 – powtac 2011-02-24 16:00:39

+0

這不起作用。 INFACT如果我使用「的strtotime(‘+0月4周太陽’)」,即返回三月的第四個星期天,即使月份的下一個第四個星期日仍然在二月 – dan 2011-02-24 16:02:14

1

爲了解決這個問題,你只需要正常化的第一個問題的一個月。所以說你想要三月的第二個星期天用於夏令時。

date('m/d/Y',strtotime('03/01/2011 second sunday')); 

或更一般

date('m/d/Y',strtotime('03/01'.date('Y').' second sunday')); 

希望這有助於。

1

沒有任何建議爲我工作。

這裏就是雖然做的:

date('m/d/Y', strtotime('Second Sunday Of March 2015')); 
相關問題