2015-10-15 74 views
1

我建立多日历,我有一个水平看接口: enter image description here环月份的天遍及整个月

我想在整个一月运行一周的日子S,M,T,W,T,F,S 代替就像图片中的前7个一样。

其绘制日历功能:

//our case "SUN" 
if(AC_START_DAY=="sun"){ 
    for($k=0; $k<7; $k++){ 
     $weekday = mb_substr($lang["day_".$k.""],0,1,'UTF-8'); 
     $list_day_titles.='<li class="cal_weekday"> '.$weekday.'</li>'; 
    } 
} 
//If we chose Monday as start week. 
else{ 
    if ($first_week_day == 0) $first_week_day =7; 
    for($k=1; $k<=7; $k++){ 
     if($k==7) $weekday = mb_substr($lang["day_0"][0],0,1,'UTF-8'); 
     else  $weekday = mb_substr($lang["day_".$k.""],0,1,'UTF-8'); 
     $list_day_titles.='<li title="'.$lang["day_".$k.""].'"> '.$weekday.'</li>'; 
    } 
} 

朗文件:

$lang["day_0"]  = "Sunday"; 
$lang["day_1"]  = "Monday"; 
$lang["day_2"]  = "Tuesday"; 
$lang["day_3"]  = "Wednesday"; 
$lang["day_4"]  = "Thursday"; 
$lang["day_5"]  = "Friday"; 
$lang["day_6"]  = "Saturday"; 

已经定义

$month=sprintf("%02s",$month); 
// define vars 
$today_timestamp = mktime(0,0,0,date('m'),date('d'),date('Y')); # current timestamp - used to check if date is in past 
$this_month   = getDate(mktime(0, 0, 0, $month, 1, $year));  # convert month to timestamp 
$first_week_day  = $this_month["wday"];        # define first weekday (0-6) 
$days_in_this_month = cal_days_in_month(CAL_GREGORIAN,$month,$year); # define number of days in week 
$day_counter_tot = 0; # count total number of days showin INCLUDING previous and next months - use to get 6th row of dates 

貌似$lang["day_".$k.""]只是数着日子从0到6 ..我怎么能循环直到月底?

注:我试图增加$k<7只是出现更多空的蓝色框。

+0

好开始使用这些功能将需要知道他们正在处理什么一个月,所以它可以计算出可天有当月,这样你就可以改变环路限制为正确的数字的天输出 – RiggsFolly

回答

0

使用循环到30/31天。

然后改变这一行

$weekday = mb_substr($lang["day_".$k.""],0,1,'UTF-8'); 

$weekday = mb_substr($lang["day_".$k%7.""],0,1,'UTF-8'); 

这应该给你0天每个星期天。

0 % 7 = 0 (sunday) 
1 % 7 = 1 (monday) 
... 
7 % 7 = 0 (sunday again) 
8 % 7 = 1 (monday again) 
+0

这是错误的语法..没有加载 –

0

您可以使用此代码生成当前月份的所有天数。

for ($date = strtotime(date('Y-m-01')); $date < strtotime(date('Y-m-t')); $date = strtotime("+1 day", $date)) { 
     echo date("l-d", $date)."<br>"; 
    } 

将打印当前月份的所有日期,如下所示。

Thursday-01 
Friday-02 
Saturday-03 
Sunday-04 
Monday-05 
Tuesday-06 
Wednesday-07 
Thursday-08 
Friday-09 
Saturday-10 
Sunday-11 
Monday-12 
Tuesday-13 
Wednesday-14 
Thursday-15 
Friday-16 
Saturday-17 
Sunday-18 
Monday-19 
Tuesday-20 
Wednesday-21 
Thursday-22 
Friday-23 
Saturday-24 
Sunday-25 
Monday-26 
Tuesday-27 
Wednesday-28 
Thursday-29 
Friday-30 
0

看起来你几乎是对的。 您只需稍微修改您的代码即可使其以您希望的方式工作。 你应该只改变你的代码:

$number_of_days_in_the_future = 42; // Here you can put in the number of days for which you want to display the corresponding letter, and based on your screenshot that is 42 
//our case "SUN" 
if(AC_START_DAY=="sun"){ 
    for($i=0; $i<$number_of_days_in_the_future; $i++){ 
     $k = $i % 7; 
     $weekday = mb_substr($lang["day_".$k.""],0,1,'UTF-8'); 
     $list_day_titles.='<li class="cal_weekday"> '.$weekday.'</li>'; 
    } 
} 
//If we chose Monday as start week. 
else{ 
    if ($first_week_day == 0) $first_week_day =7; 
    for($i=1; $i<=$number_of_days_in_the_future; $i++){ 
     $k = $i % 7; 
     if($k==7) $weekday = mb_substr($lang["day_0"][0],0,1,'UTF-8'); 
     else  $weekday = mb_substr($lang["day_".$k.""],0,1,'UTF-8'); 
     $list_day_titles.='<li title="'.$lang["day_".$k.""].'"> '.$weekday.'</li>'; 
    } 
} 

请注意,我只是试图修复您的代码,以便它可以作为你指望它。 有可能是一个更优雅的解决方案,但我不知道你的完整代码,所以我只是猜测,如果我试图给你另一种方法。

我希望这会帮助你。

干杯