2017-09-13 110 views
0

有誰知道如何得到這個返回false?strtotime(「2017年9月5日星期五」)返回「2017年10月2日」?

有9月份沒有5星期一,所以這個函數返回:2017年10月2日

date("jS F, Y", strtotime("fifth monday september 2017")); 
+4

它不會返回false藝術。添加另一個檢查來查看返回日期的月份是否與您正在查找的月份相同。 – aynber

+4

我的意思是說,這是從9月的第一個星期一開始的第五個星期一......似乎甚至比返回錯誤的要好:)你可以讓你的fn檢查一個月是否一樣... –

+0

https:// stackoverflow .com/questions/4150435/php-strtotime-last-monday-if-today-is-monday?rq = 1 - 有相同的想法。 –

回答

2

PHP的strtotime是基於GNU的日期解析C函數(IIRC它實際上調用這個C函數,而不是使用其自己實現)。從GNU documentation

本週將轉發日期一天的明確提及(僅在必要時),以達到在未來一週的那一天......一些可能先於一週中的一天項目推進補充周。

因此,使用您提供的示例,您不會直接從strtotime得到錯誤結果。如果您想確認的結果是在同一個月,你可以這樣做:

$timestamp = strtotime("fifth monday september 2017"); 
$month = date('n', strtotime("september 1, 2017")); 
$same_month = (date('n', $timestamp) === $month); 

而且from the GNU documentation,添加一些觀點:

我們的時間計量單位,從達秒到幾個月的時間,都是如此複雜,不對稱和不連貫,以便在時間上進行連貫的精神推算,但幾乎不可能......與更成功的語言和科學模式不同,它們使我們能夠大膽地或至少在水平上面對經驗,時間計算系統默默地,持續地鼓勵我們對時間的恐懼......難怪我們經常看着我們的o直到過去或未來,上週二或週日從星期一開始,感到無助的困惑。

- 羅伯特·格魯丁,時間和生活

相關問題