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

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

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

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

HTML

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

Q&A

解決済

2回答

6192閲覧

縦型のカレンダーを出力したい PHP

hiro0208

総合スコア75

PHP

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

HTML

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

0グッド

1クリップ

投稿2017/02/16 12:04

編集2017/02/17 03:00

最終的には画像のように送信ボタンを押したら、選択年月が曜日と合わせて
テーブルで出力されるカレンダーを作りたいのですが、
月初の曜日を月末まで連続して出力する処理の書き方がわからないです。

基礎的なことかと思いますが、ご親切な方どなたかご教授いただけないでしょうか。

曜日が合わせて出力できたら送信ボタンに$_POSTを紐付けようと思っています。
*背景色は無視して結構です。

現在途中のソースコードですが、ご確認いただければと思います。

<?php $d = date('Y/m/d');//今月日付取得 list($year, $month, $day) = explode('/', $d);//日付を分解 $wd = date('w', $timestamp);//曜日(0:日曜~6:土曜)の取得 $ld = date('t');//月の日数 $thisYear = date('Y');//今年 $firstDay = date('Y/m/d', mktime(0, 0, 0, $month , 1, $year));//当月の初日を取得 $lastDay = date('Y/m/d', mktime(0, 0, 0, $month +1, 0, $year));//当月の末日を取得 $firstWeek = date('w', mktime(0, 0, 0, $month , 1, $year));//当月の初日の曜日を取得 for ($i=($thisYear-10); $i<=($thisYear+10); $i++) {//プルダウンの表記は今年から±10 $optionYear .= '<option value="' . $i . '">' . $i . '</option>' . "\n"; } for ($i=1;$i<=12; $i++) {//プルダウン1~12月 $optionMonth .= '<option value="' . $i . '">' . $i . '</option>' . "\n"; } for ($i=1; $i<=31; $i++) {//プルダウン1~31日 $optionDay .= '<option value="' . $i . '">' . $i . '</option>' . "\n"; } $weekday = array('日','月','火','水','木','金','土');//曜日の配列作成 $fw = $firstWeek; $s = '<table border="1"><tr>'; for ($day=$firstDay; $day<=$lastDay; $day++) {//月末まで繰り返し出力 $s .= "<td>$day</td><td>$fw</td></tr>";//選択月の日付・曜日の表示 } $s .= "</table>"; ?> <!doctype html> <html> <head> <meta charset="UTF-8"> <title>選択・日付曜日出力</title> <style> td { padding: 5px; border: 1px solid #333; text-align: right; } </style> </head> <body> <h1>選択月の日付と曜日を表示</h1> <form action="" method="post"> <select name="year"><?php echo $optionYear; ?></select>年 <select name="month"><?php echo $optionMonth; ?></select>月 <input type="submit" name="btn" value="送信"> </form> <?php echo $s; ?> </body> </html>

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

つかっていない変数もあり無駄が多いのかなぁと
例えばこんな感じ

PHP

1<?php 2$d = date('Y/m'); 3list($year, $month) = explode('/', $d); 4$thisYear=$year; 5if(isset($_POST["year"])) $year=$_POST["year"]; 6if(isset($_POST["month"])) $month=$_POST["month"]; 7$optionYear=""; 8for ($i=($thisYear-10); $i<=($thisYear+10); $i++) { 9 $selected=($i==$year)?" selected":""; 10 $optionYear .= "<option value=\"{$i}\"{$selected}>{$i}</option>\n"; 11} 12$optionMonth=""; 13for($i=1;$i<=12; $i++) { 14 $selected=($i==$month)?" selected":""; 15 $optionMonth .= "<option value=\"{$i}\"{$selected}>{$i}</option>\n"; 16} 17$weekday = array('日','月','火','水','木','金','土'); 18 19$s = '<table border="1"><tr>'; 20for($i=mktime(0,0,0,$month,1,$year);$i<mktime(0,0,0,$month+1,1,$year);$i+=60*60*24) { 21 $s .= "<td>".date('Y/m/d',$i)."</td><td>".$weekday[date('w',$i)]."</td></tr>"; 22} 23$s .= "</table>"; 24 25?> 26<form method="post"> 27<select name="year"><?php echo $optionYear; ?></select>28<select name="month"><?php echo $optionMonth; ?></select>29<input type="submit" name="btn" value="送信"> 30</form> 31<?php echo $s; ?> 32</body> 33</html>

投稿2017/02/16 12:38

yambejp

総合スコア114839

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hiro0208

2017/02/16 13:25

ありがとうございます!! 加算代入で初期値を含めて、加算していくこと。 for文でタイムスタンプをカウンタ変数に代入し、date関数で日付を取得していくことがポイントだと感じました。 他にも、エスケープシーケンスを使い文字数を削減し簡略にしてるとこなどとても勉強になりました。 POST送信まで見ていただいてありがとうございます。 改めて復習しときます。あと良ければ、しっかり基礎を身につけていきたいと思っていますが、これくらのレベルに対しておすすめの本や教材などはどのようなものご存知でしょうか? また基礎的なポイントを押さえていく学習方法などあればご参考にしたいです。よろしくお願いします!
guest

0

http://php.net/manual/ja/datetime.formats.relative.php

php

1date('m/d', strtotime('last day of July 2008'));

#サンプル

php

1<?php 2ini_set('display_errors', true); 3error_reporting(E_ALL); 4 5function weekday(DateTime $dt) 6{ 7 $weeks = ['日', '月', '火', '水', '木', '金', '土']; 8 return $weeks[$dt->format('w')]; 9} 10 11$dt = new DateTime('first day of this month'); 12 13if (filter_input(INPUT_POST, 'y') && filter_input(INPUT_POST, 'm')) { 14 $year = filter_input(INPUT_POST, 'y'); 15 $month = filter_input(INPUT_POST, 'm'); 16 $dt = new DateTime(sprintf('%d-%d-01', $year, $month)); 17} 18 19$month = $dt->format('m'); 20?> 21<!DOCTYPE html> 22<html> 23 <head> 24 <meta charset="UTF-8"> 25 <title></title> 26 <style type="text/css"> 27 body > div { 28 margin: 1em 0; 29 } 30 table { 31 border-collapse: collapse; 32 } 33 table th, table td { 34 border: 1px solid #CCC; 35 } 36 </style> 37 </head> 38 <body> 39 <div> 40 <form action="" method="post"> 41 <select name="y"> 42 <?php foreach (range(2016, 2017) as $y): ?> 43 <?php if ((new DateTime())->format('Y') == $y) : ?> 44 <option value="<?= $y; ?>" selected="selected"><?= $y; ?></option> 45 <?php else : ?> 46 <option value="<?= $y; ?>"><?= $y; ?></option> 47 <?php endif; ?> 48 <?php endforeach; ?> 49 </select> 50 <select name="m"> 51 <?php foreach (range(1, 12) as $m): ?> 52 <?php if ((new DateTime())->format('m') == $m) : ?> 53 <option value="<?= $m; ?>" selected="selected"><?= $m; ?></option> 54 <?php else : ?> 55 <option value="<?= $m; ?>"><?= $m; ?></option> 56 <?php endif; ?> 57 <?php endforeach; ?> 58 </select> 59 <button>変更</button> 60 </form> 61 </div> 62 <div> 63 <table> 64 <thead> 65 <tr> 66 <th></th> 67 <th></th> 68 <th></th> 69 <th>曜日</th> 70 </tr> 71 </thead> 72 <tbody> 73 <?php while ($month == $dt->format('m')): ?> 74 <tr> 75 <td><?= $dt->format('Y'); ?></td> 76 <td><?= $dt->format('m'); ?></td> 77 <td><?= $dt->format('d'); ?></td> 78 <td><?= weekday($dt); ?></td> 79 </tr> 80 <?php $dt->add(new DateInterval('P1D')) ?> 81 <?php endwhile; ?> 82 </tbody> 83 </table> 84 </div> 85 </body> 86</html>

投稿2017/02/16 12:17

編集2017/02/16 14:34
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hiro0208

2017/02/16 13:25

ありがとうございます。strtotimeでの加減算の使用方法など見直して、PHPマニュアルも読むようにしときます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問