在整个月中循环每月的日子

时间:2015-10-15 10:12:15

标签: php loops for-loop

我正在构建多个日历,我有一个水平的界面: 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文件:

$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只显示更多空蓝框。

3 个答案:

答案 0 :(得分: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)

答案 1 :(得分: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

答案 2 :(得分:0)

看起来你几乎做对了。 您只需稍微修改您的代码,使其按您希望的方式工作。 您只需将代码更改为:

message=(''.join('0'+format(ord(x), 'b') for x in message))

请注意,我只是尝试修复您的代码,以便它按预期工作。 可能有一个更优雅的解决方案,但我真的不知道你的完整代码所以我只是猜测我是否试图为你提供另一种方法。

我希望这会对你有所帮助。

干杯