【问题标题】:Loop the days of the month throughout the whole month在整个月中循环每月的日子
【发布时间】:2015-10-15 10:12:15
【问题描述】:

我正在构建多日历,我有一个横向的界面:

我正在尝试运行一周中的几天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&lt;7 只是出现更多的空蓝框。

【问题讨论】:

  • 从这些函数开始,需要知道它们处理的月份,以便计算该月有多少天,因此您可以将循环限制更改为正确的数字输出天数

标签: php loops for-loop


【解决方案1】:

使用循环到 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)

【讨论】:

    【解决方案2】:

    您可以使用此代码生成当月的所有日期。

    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
    

    【讨论】:

      【解决方案3】:

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

      $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>';
          }
      }
      

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

      希望对你有所帮助。

      干杯

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-10-24
        • 2021-11-26
        • 1970-01-01
        • 1970-01-01
        • 2019-05-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多