2012-02-18 12 views
-1

シンプルなカレンダーを作成しようとしていますが、ネストされたwhilesで出力を取得しようとしていますが、動作しないように見えます。 「自分の論理」では何が間違っているのか分かりません。誰が私のミスがどこにあるのかを指摘できますか? * ** * ***年月と月月のPHPループ

//Starting month 
$mes = '2012-01-01'; 
//Counter months 
$m = 1; 
//LOOP month 
while($m <= 12){ 
    //Variables days 
    $data = $mes; 
    //Counter days 
    $x = 1; 
    //LOOP days 
    while($x <= 31){ 
    echo "$data"; 
    //adding one day 
    $data = strtotime("$data + 1 days"); 
    $data = date("Y-m-d",$data); 
    ++$x; 
    } 
    //adding one month 
    $mes = strtotime("$mes + 1 month"); 
    $mes = date("Y-m-d",$mes); 
    ++$m; 
} 

** EDIT: *

申し訳ありませんが、みんなが、コードが実際に動作する、と私は代わりに、Joomlaの問題に実行します。

のJoomlaを使用し、これと同じエラーを取得する人のためのソリューションです:

  • あなたのサイトのルートにconfiguration.phpに行きます。

ini_set( '}' の後)COMAND

  • 挿入最後の行( 'pcre.backtrack_limit'、-1);たくさん

  • +0

    さて、どうしたの?どの時点で失敗するのですか? –

    +0

    私はそのコードに何の問題も見当たりません、私は問題なくローカルに走っています。スクリプトに他のPHPコードがないのは確かですか? – Optimist

    +0

    [私はPHPで2つの日付がありますが、どのようにしてforeachループを実行して、それらの日のすべてを調べることができますか?](http://stackoverflow.com/questions/3207749/i-have-2-dates-in -php-how-can-i-run-a-foreach-loop-to-go-through-all-of-those-d) – Gordon

    答えて

    0

    おかげで間違った行は、次のとおりです。$data = $mes;あなたが最初のwhileループの前にそれを置く必要があります。

    0

    基本カレンダー(日ループ):

    $start = strtotime("01/01/2010"); 
    $i_max = (date("L",$start)?366:365)-1; 
    
    for($i = 0;$i <= $i_max;$i++) 
        $calendar 
         [strftime("%B",$loop = strtotime("+$i day",$start))] 
         [strftime("%V",$loop)] 
         [strftime("%a",$loop)] = strftime("%e",$loop); 
    
    print_r($calendar); 
    

    高度な、これは簡単に印刷可能で、かつヶ月で一日のオーバーラップを示しています

    $calendar_year = 2010; 
    $start = strtotime("01-01-$calendar_year"); 
    if(strftime("%u",$start) != "1") 
        $start = strtotime("last Monday",$start); 
    
    $end = strtotime("31-12-$calendar_year"); 
    if(strftime("%u",$end) != "7") 
        $end = strtotime("next Sunday",$end); 
    
    
    $loop = $start; 
    $d_names = $m_names= array(); 
    while($loop<=$end) 
    { 
        $data = explode(",",strftime("%d,%u,%V,%m,%Y,%a,%B",$loop)); 
        list($d,$d_nr,$w,$m,$y,$d_name,$m_name) = $data; 
        $m = (int)$m; 
        $w = (int)$w; 
        $d = (int)$d; 
    
        if(!isset($d_names[$d_nr]))$d_names[$d_nr] = $d_name; 
        if(!isset($m_names[$m]))$m_names[$m] = $m_name; 
    
        if($y!=$calendar_year) 
         $m = $m==12?0:13; 
    
        $calendar[$m][$w][$d_nr] = array($d,true); 
    
        $loop = strtotime("+1 day",$loop); 
    } 
    for($m = 1;$m<=13;$m++) 
        foreach($calendar[$m] as $w =>&$days) 
         if(count($days)<7) 
         { 
          for($i = 1; $i<=7;$i++) 
           if(!isset($days[$i])) 
            $days[$i] = isset($calendar[$m-1][$w][$i])? 
             array($calendar[$m-1][$w][$i][0],false): 
             array($calendar[$m+1][$w][$i][0],false); 
          ksort($days);    
         } 
    unset($calendar[0],$calendar[13]); 
    
    echo "<table>"; 
    echo "<tr><th COLSPAN=8>$calendar_year</th></tr>"; 
    foreach($calendar as $month => $weeks) 
    { 
        echo "<tr><th COLSPAN=8>$m_names[$month]</th></tr>"; 
        $first_week = true; 
        foreach($weeks as $week => $days) 
        { 
         if($first_week) 
         { 
          echo "<tr><th></th>"; 
          foreach($days as $day_nr => $day_data) 
           echo "<th>$d_names[$day_nr]</th>"; 
          echo "</tr>"; 
    
          $first_week = false; 
         } 
         echo "<tr><th>$week</th>"; 
         foreach($days as $day_nr => $day_data) 
          echo "<td".($day_data[1]?"":" style='color:gray;'").">$day_data[0]</td>"; 
         echo "</tr>"; 
        } 
    }   
    echo "</table>"; 
    

    両方がISO8601規格に基づいて、およびのlangaugeの設定をサポートしています:

    setlocale(LC_TIME、 "en_EN.utf8");