【初心者】PHPでカレンダー出力のプログラミングを解説【プログラミング初心者の入門講座】

2020年3月2日システムPHP,プログラミング初心者

【初心者】PHPでカレンダー出力のプログラミングを解説【プログラミング初心者の入門講座】
【初心者】PHPでカレンダー出力のプログラミングを解説【プログラミング初心者の入門講座】

どうも、UT(@ut_1029)です。

PHPカレンダーを出力するプログラミング解説です。カレンダー出力のプログラミングは、forの制御を練習する課題としてとても最適な練習問題です。

ぜひ実際にプログラミングしてforループ処理を理解しましょう。

JavaScriptカレンダー出力をするサンプルコードを解説した「【初心者】JavaScriptでカレンダーのプログラミングを解説」も是非ご覧ください。

【初心者】PHPでカレンダー出力のプログラミングを解説

PHPでカレンダー出力するプログラミングのサンプルコード

<?php
$weeks = [
    0=>'日',
    1=>'月',
    2=>'火',
    3=>'水',
    4=>'木',
    5=>'金',
    6=>'土',
];
$today = time();
$start = date('Ym01', $today);
$end   = date('Ymt', $today);

$days = [];
$len = 0;
for ($day=$start; $day<=$end; $day++) {
    $w = date('w', strtotime($day));
    if ($w == 0) {
        $len++;
    }
    
    if (!isset($days[$len])) {
        foreach ($weeks as $key_week=>$val_week) {
            $days[$len][$key_week] = '';
        }
    }
    
    $days[$len][$w] = $day;
}
?>
<html>
    <head>
        <title>PHPでカレンダー</title>
    </head>
    <body>
        <h1>PHPでカレンダーを作成</h1>
        <div>
            <?php echo date('Y年n月', $today) ?>
        </div>
        <table>
            <thead>
                <tr>
                    <?php foreach ($weeks as $key_week=>$val_week) : ?>
                        <th><?php echo $val_week ?></th>
                    <?php endforeach; ?>
                </tr>
            </thead>
            <tbody>
                <?php foreach ($days as $day) : ?>
                <tr>
                    <?php foreach ($weeks as $key_week=>$val_week) : ?>
                    <?php
                    $style = '';
                    if ($key_week == 0) {
                        $style = 'color: red;';
                    }
                    elseif ($key_week == 6) {
                        $style = 'color: blue;';
                    }
                    ?>
                    <?php if ($day[$key_week]) : ?>
                    <td style="text-align: right;<?php echo $style ?>"><?php echo date('j', strtotime($day[$key_week])) ?></td>
                    <?php else : ?>
                    <td></td>
                    <?php endif; ?>
                    <?php endforeach; ?>
                </tr>
                <?php endforeach; ?>
            </tbody>
        </table>
    </body>
</html>
変更履歴

  • pickles様よりコメントでご指摘頂いた内容をフィックス

PHPでカレンダー出力するプログラミングのサンプルコードを解説

曜日の名称を配列で用意

$weeks = [
    0=>'日',
    1=>'月',
    2=>'火',
    3=>'水',
    4=>'木',
    5=>'金',
    6=>'土',
];

PHPのdate関数を使用した"date('w’)"で曜日を取得すると、数字で曜日が表されます。そのために各曜日の名称を格納した配列を用意しておきます。

現在の年月日を取得

$today = time();

PHPのtime関数を使用してUNIXタイムスタンプで現在の年月日を取得します。この日にちを基準にカレンダーを表示します。

UNIXタイムスタンプとは

コンピュータシステム上での時刻表現の一種です。
協定世界時(UTC)の1970年1月1日 00時00分00秒から経過した時間(秒数)を表す時刻表現を指します。

現在の月初と月末の日にちを取得

$start = date('Ym01', $today);
$end   = date('Ymt', $today);

現在の年月日から月末を取得します。

  • $start = date('Ym01’, $today);
    • 月初の年月日を取得
  • $end = date('Ymt’, $today);
    • 現在の月末日を取得。

カレンダー出力用の配列を作成

$days = [];
$len = 0;
for ($day=$start; $day<=$end; $day++) {
    $w = date('w', strtotime($day));
    if ($w == 0) {
        $len++;
    }

    if (!isset($days[$len])) {
        foreach ($weeks as $key_week=>$val_week) {
            $days[$len][$key_week] = '';
        }
    }

    $days[$len][$w] = $day;
}

カレンダー出力用の配列を作成します。さきほど取得した月初から月末までの日にちを配列へ格納していきます。

  • $days = [];
    • カレンダー出力用の配列
  • $len = 0;
    • 週の数、カレンダーの行数
  • for ($day=$start; $day<=$end; $day++) {
    • $day=$start;
      • $dayの初期値として1日をセット、$dayは日にちを代入
    • $day<=$end;
      • 月初から月末までループ
    • $day++
      • 日にちをインクリメント(1ずつ加算)
  • $w = date('w’, strtotime($day));
    • 曜日を取得
  • if ($w == 0) {
    • 日曜日の時に
    • $len++;
      • $len(週の数)をインクリメント
  • if (!isset($days[$len])) {
    • カレンダー配列に$lenの週が格納されていない場合
    • foreach ($weeks as $key_week=>$val_week) {
      • その週の7日分データを$days(カレンダー配列)に格納
      • $days[$len][$key_week] = ";
  • $days[$len][$w] = $day;
    • 日にちを$days(カレンダー配列)に代入

HTMLの文字コード(charset)を定義

<meta charset="UTF-8">

HTMLの文字コード(charset)をUTF-8で定義します。

文字コードを定義しないと日本語が文字化けする原因となります。

カレンダーの年月を出力

<div>
    <?php echo date('Y年n月', $today) ?>
</div>

カレンダー表示する年月を出力します。日付のフォーマットを2020年3月となるように"Y年n月"と定義しています。

曜日を出力

<thead>
    <tr>
        <?php foreach ($weeks as $key_week=>$val_week) : ?>
            <th><?php echo $val_week ?></th>
        <?php endforeach; ?>
    </tr>
</thead>

tableタグのtheadタグでテーブル一覧の項目に曜日を出力します。

カレンダーを出力

<tbody>
    <?php foreach ($days as $day) : ?>
    <tr>
        <?php foreach ($weeks as $key_week=>$val_week) : ?>
        <?php
        $style = '';
        if ($key_week == 0) {
            $style = 'color: red;';
        }
        elseif ($key_week == 6) {
            $style = 'color: blue;';
        }
        ?>
        <?php if ($day[$key_week]) : ?>
        <td style="text-align: right;<?php echo $style ?>"><?php echo date('j', strtotime($day[$key_week])) ?></td>
        <?php else : ?>
        <td></td>
        <?php endif; ?>
        <?php endforeach; ?>
    </tr>
    <?php endforeach; ?>
</tbody>

tableタグのtbodyタグでテーブル一覧へカレンダーを出力します。

  • foreach ($days as $day) :
    • カレンダー出力用配列をforeachでループ
    • foreach ($weeks as $key_week=>$val_week) :
    • 日曜日から土曜までをforeachでループ
      • if ($key_week == 0) {
        • $style = 'color: red;’;
        • 日曜日なので文字を赤色へ
      • elseif ($key_week == 6) {
        • $style = 'color: blue;’;
        • 土曜日なので文字を青色へ

まとめ

今回はPHPカレンダープログラミングしたサンプルコードを解説しました。プログラミングカレンダーの作成は、プログラミング初心者に適したサンプルコードです。

プログラミングのポイント

  • forでループしながら行う処理をしっかりとイメージ

カレンダープログラミングは、foreachfor配列を理解することができます。是非みなさんも実際にプログラミングすることをオススメします。

JavaScriptカレンダー出力をするサンプルコードを解説した「【初心者】JavaScriptでカレンダーのプログラミングを解説」も是非ご覧ください。

プログラミング解説講座

UT
UTの日常

当ブログ(UTの日常)を運営しているUTは「プログラミング関係の仕事をしている30代1児の父親」です。詳しくは「UTのプロフィール」をご覧ください。

UTの日常では、システム開発における LinuxPHPJavaScriptJQueryMySQLなどの知識やプログラミング技術、サーバ構築や運用などAWSをメインに知識を紹介しています。

内容としては、Webシステムの開発中や運用中に発生したトラブルやエラーの対応や解決方法をまとめた備忘録やWebシステム開発の方法を未経験者の人を対象に説明したプログラム教科書を記事にしています。
Webシステム開発の知識やプログラム技術の備忘録

2020年3月2日システムPHP,プログラミング初心者

Posted by UT