2011-03-28 90 views
1

如何統計任意月的星期數和星期幾。如何統計任意月份的星期數和星期幾

+0

我想要no。例如,在這個日期的任何一個月的星期幾 - 1月 - 2011年6周。任何想法? – Layric 2011-03-28 12:50:15

+0

本週的第一天和最後一天是什麼?您需要調整任何算法,以考慮週日開始的某些日曆和週一開始的其他日曆。 – oosterwal 2011-03-30 13:44:54

回答

11

好吧,我想我有你:「什麼是一週的開始日」

$days = cal_days_in_month(CAL_GREGORIAN, 1, 2011); 

$week_day = date("N", mktime(0,0,0,1,1,2011)); 

$weeks = ceil(($days + $week_day)/7); 

echo $weeks; 
+0

雖然很多年前,這個幫助我構建了一個完美的'show-Human-Date'php函數。 :秒,分,小時,天,周,月和年你的cal_days_in_month做到了這一招,謝謝! – KJS 2014-09-04 00:21:27

+1

有些日期對於這個公式不正確,如:2020-feb return 6 expect 5 2009-feb return 5 expect 4, 2012年6月6日預計5日,2014年 - 可能還會有6家預期5家。 – vee 2015-08-10 15:01:34

5

此代碼返回一個月的天數,週數。

<?php 
for ($year = 2011; $year <= 2012; $year++){ 
    for ($month = 1; $month <= 12; $month++){ 
     $num_of_days = date("t", mktime(0,0,0,$month,1,$year)); 
     $month_Year = date("F",mktime(0, 0, 0, $month, 1, $year)); 
     echo "<b>$month_Year, $year </b><BR>"; 
     echo "Number of days = $num_of_days <BR>"; 
     $firstdayname = date("D", mktime(0, 0, 0, $month, 1, $year)); 
     $firstday = date("w", mktime(0, 0, 0, $month, 1, $year)); 
     $lastday = date("t", mktime(0, 0, 0, $month, 1, $year)); 
     $lastdayname = date("D", mktime(0, 0, 0, $month, $lastday, $year)); 
     echo "First day of the month = $firstday,$firstdayname <BR> "; 
     echo "Last day of the month = $lastday,$lastdayname <BR> "; 
     $no_of_weeks = 1; 
     $count_weeks = 0; 
     while($no_of_weeks <= ($lastday+$firstday)){ 
      $no_of_weeks += 7; 
      $count_weeks++; 
     } 
     echo "Number Of weeks = $count_weeks <br><br>"; 
    } 
} 
?> 
+0

對不起,我似乎無法確定$ lastday和$ firstday從哪裏來? – 2011-03-28 13:09:25

+0

哦!我以前編寫過代碼,以查明每個月的第一天和最後一天。忘了刪除它。 – 2011-03-28 13:17:00

+0

現在編輯。覈實 ! – 2011-03-28 13:19:53

0

這取決於

假設我們每週的第一天是星期一,意味着如果一個月有5個星期一,我們將有一個月有5個星期。

function nbweeks_of_month($month, $year){ 
    $nb_days = cal_days_in_month(CAL_GREGORIAN, $month, $year); 
    $first_day = date('w', mktime(0, 0, 0, $month, 1, $year)); 

    if($first_day > 1 && $first_day < 6){ 
     // month started on Tuesday-Friday, no chance of having 5 weeks 
     return 4; 
    } else if($nb_days == 31) return 5; 
    else if($nb_days == 30) return ($first_day == 0 || $first_day == 1)? 5:4; 
    else if($nb_days == 29) return $first_day == 1? 5:4; 
} 
0
<?php 

function weeks($month, $year){ 
     $num_of_days = date("t", mktime(0,0,0,$month,1,$year)); 
     $lastday = date("t", mktime(0, 0, 0, $month, 1, $year)); 
     $no_of_weeks = 0; 
     $count_weeks = 0; 
     while($no_of_weeks < $lastday){ 
      $no_of_weeks += 7; 
      $count_weeks++; 
     } 
    return $count_weeks; 
} 

echo weeks(2,2011)."<br/>"; 
echo weeks(9,2012)."<br/>"; 

?>