2014-01-07 92 views
0

一天在我的PHP應用程序啓動我有三個變量:PHP - 獲得一個給定的週數的第一天,當週上比周一

代碼:

$year = 2014 
$weeknumber = 1 
$weekstarts = 6 //Week starts on Saturday. 1=Monday... 6=Saturday and 7=Sunday 

有了這三個參數我想弄清楚一週的第一天是什麼。在這種情況下,2014年第一週,即星期六開始的一週,12月28日爲 2014-01-04。

對於週一開始星期,我可以很容易地想出解決辦法:

代碼:

$first_day_of_week = strtotime($year . "W" . "0".$weeknumber) 

但它並不適用於在以週一開始幾天幾周工作。

+0

這真的很難告訴你在問什麼。你是否想知道某個特定日期的前一個星期六是什麼? – davethegr8

+0

我們是在說實際的週數,還是隻是「無論第一週是什麼日期,從今年的第一週開始算起第一週」呢? – Wrikken

+0

@ davethegr8你能提供一個你想法的實現嗎? – user2070775

回答

1

使用DateTime::setISODate,其中第三個參數是星期幾:

$dt = new DateTime; 
echo $dt->setISODate(2014, 1, 0)->format('Y-m-d'), "\n"; # 0 = Sunday 
echo $dt->setISODate(2014, 1, 1)->format('Y-m-d'), "\n"; # 1 = Monday 
echo $dt->setISODate(2014, 1, 6)->format('Y-m-d'), "\n"; # 6 = Saturday 

demodemo #2


您的例子不工作,因爲你正在使用的格式yyyyWweek,這是默認的星期一。 Read about ISO-8601 formats,你會看到有格式yyyy-Wweek-day,您可以使用這樣的:

$format = sprintf("%d-W%02d-%d", $year, $weeknumber, $weekstarts == 7 ? 0 : $weekstarts); 
$first_day_of_week = strtotime($format); 
echo "$format returned $first_day_of_week\n"; 

demo

+0

感謝您提及該功能。不過,我在Google日曆中看到,週六開始的2014年第一週的第一天是2013年12月28日星期六,而不是1月4日的星期六。 – user2070775

+0

@ user2070775:2013年第一個ISO周開始2013-12-30。您正在談論2013年的最後一週,其中基於2013年12月28日開始的星期六。如果您希望從當前/選定的一週獲得前一週,那麼您所需要做的就是將週數減1。正如我所說的,您應該先閱讀ISO-8601所代表的內容,然後查看您需要的應​​用程序。 –

+0

適用於Android 4.3的Google日曆應用程序表示,2014年的第一週(週六從星期六開始)爲2013-12-28。也許他們沒有遵循ISO標準 – user2070775

相關問題