質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.75%

  • PHP

    19207questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

  • HTML

    8322questions

    HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

PHPを使ったカレンダーの作成

解決済

回答 3

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 219

ck_sen

score 1

今週初めてHTMLとPHPの勉強を始めました。
初歩的な質問で申し訳ないのですが、PHPを使ったカレンダーの作成について教えてください。

作りたいもの
HTMLとPHPを使って、カレンダーを表示したいです。
フォームで2018年6月と選択して表示ボタンを押したら、その月のカレンダーが表示されるようにしたいです。
→カレンダーが出来たらスケジュールに応用する予定です

現在の状態
Tableタグを使って、5行7列の枠線入りの表を作りました。
「月曜日」などの見出しは表示できています。

困っていること
日付の数字の入れ方がわからず、現状ではHTMLのタグの中に直接数字を入れているので、月が変わっても曜日対応ができません。
PHPを使って動的なカレンダーをつくりたいのですが、ループや関数をどのように使えばよいか知りたいです。

よろしくお願いします。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • shinobu_osaka

    2018/06/14 23:08

    動くソースがほしいのでしょうか?学習のためにカレンダーの作成方法が知りたいのでしょうか?後者であれば簡単なカレンダー作成のヒントになる回答をいたしますが…。

    キャンセル

  • ck_sen

    2018/06/14 23:28

    カレンダーの作成方法のヒントが知りたいです。ソースが載っているWebページは見たのですが、それぞれがどういうコードなのか、なぜ必要なのか理解がまだ追いついていません。どういった手順や考え方でカレンダーを作成するのかをまずは知りたいと思っています。

    キャンセル

  • mts10806

    2018/06/15 09:23

    おそらくどのページも似た作り方をしているので、今ここでソースをもらっても同じですよ。PHPマニュアル参考に1個1個調べて自分で理解するように努めてください。じゃないと「分かった気」になっていつまでたっても身につきません。

    キャンセル

  • mts10806

    2018/06/15 09:24

    完成品を追う前に必要な部品を細分化してそれぞれの部品を組み立ててください。今の状態でカレンダーを作るには何もかも足りません。

    キャンセル

回答 3

checkベストアンサー

+3

そうですね、まずはカレンダーの日付部分のセルを左上から右に0、1、2…と考え、
配列に数字を入れたものをテーブルを作成する際にそこに入れていけば良いのではないでしょうか。
カレンダーは日曜日から始まってるとして、
1日目の位置を考えます、

date("w",strtotime("2018-6-1"));


このコードで曜日が日曜から順に0,1,2,3,4,5,6と取得できますので、
配列のその曜日番号から順に月末まで入れてやればOKです、

date("t",strtotime("2018-6"));


月末の日付は上記で取得できます。
あとは…

for ($i = 0; $i <= 月末日付; $i++) {
    配列[$i + 月頭曜日] = $i
}


こんな感じで回してやればOKです、
あとはHTMLの該当部分にDOM操作で日付をいれてやればOKです。
配列の日付が入っている部分以外は初期化されていませんので、
事前に全て””を代入して初期化してやるなり、
出力する際にUndefined判定をするなりなんとかしてください。

動的にするには「月」を変数に入れて上記の月頭曜日の数字取得と、
月末日付取得の”月”部分に入れて、再度実行すれば良いかと思います。

サンプルをちょいちょいっと書いてみました。

$tsuki = 9;
$gm = date("t",strtotime("2018-" . $tsuki));
$ga = date("w",strtotime("2018-" . $tsuki . "-1"));
for ($i = 0; $i <= 42; $i++){
    $carray[$i] = "";
}
for ($i = 1; $i <= $gm; $i++) {
    $carray[$i + $ga] = $i;
}
echo "<table>";
echo "<TR><TD>日</TD><TD>月</TD><TD>火</TD><TD>水</TD><TD>木</TD><TD>金</TD><TD>土</TD></TR>";

echo "<TR>";
for ($i = 0; $i <= 42; $i++) {
    echo "<TD>" . $carray[$i] . "</TD>"; 
    if ($i%7 == 0){
        echo "</TR><TR>";
    }    
}
echo "</TR>";
echo "</TABLE>";

できるだけわかりやすい構文で、入門者でもわかりやすく書きました。
見たことがない可能性があるのは「$i%7」ここくらいでしょうか?
%演算子は剰余、割ったあまりを返します、
あまりがゼロであれば、つまり7日毎に </TR><TR> を出して改行してる感じですね。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/06/14 23:35

    とりあえず完成品サンプルコードもいりますか?

    キャンセル

  • 2018/06/15 00:00

    サンプルコードもいれました、がんばってくださいね。

    キャンセル

  • 2018/06/17 22:37

    ありがとうございます!一緒に勉強している人と1行ずつ読み解きながら、なんとかできました!もう一度関数や変数の部分から勉強し直していきたいです。

    キャンセル

+1

PHP カレンダー で検索するとソース付きで解説しているサイトがいくらでも。

これに切り替え機能など、自分なりにやってみるといいでしょう。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/06/17 22:42

    回答いただきありがとうございます!少しずつですが作り方の手順がわかってきたので、自分の作りたいものを実現できるように調べて実践していきたいです。

    キャンセル

+1

Tableタグを使って、5行7列の枠線入りの表を作りました。

カレンダーの行数は以下必要です

  • 最低4行(1-28日がピタッと決まった場合)
  • 最大6行(4週間フル+前後に端数1~2日)

可変的に行数を調整するのか、最大行でつくっておいてそれに満たない場合
空の日付を表示するのか仕様をきめるところからでしょうね

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/06/17 22:40

    ありがとうございます!大変参考になりました。月始めの日の曜日を調べて、日付が入らない部分を表示し、空白を入れる仕様にすることができました!

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.75%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • PHP

    19207questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

  • HTML

    8322questions

    HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。