2011-03-28 88 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/>"; 

?>