• ベストアンサー

一週間の表示の仕方と文字表示

プログラミングの初心者です。 大学の課題でアクセスした日の一週間の日付を表示させるプログラムを組む課題が出ました。 例えばアクセスした日が13日、月曜なら 日 月 火 水 木 金 土 12 13 14 15 16 17 18と表示されるようにしたいのですが… 一週間、調べたり考えたりしたのですが全く分からず途方にくれています。 (言い訳)大学には春に編入し通っています。 今までプログラミングを全く組んだことがないのですが必修科目なので講義を受けています。 今月から始まったのですが一回目を受けて留年を本気で考えました。 講義中にも課題が出たのですがそれはなんとかサンプルやネットを使って 時間ギリギリになんとか組むことが出来ましたがこの課題は全くわかりません… 本音を言えば答えを教えて欲しいのですがヒントでもいいので教えていただけないでしょうか? それと文字の色の変え方と太さの変え方も教えて欲しいのですが… おそらくどちらも超初歩な質問だと思うのですが教えていただけないでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • inu2
  • ベストアンサー率33% (1229/3720)
回答No.2

現在の日付や曜日を取得する関数 date() http://jp.php.net/manual/ja/function.date.php 日付を UNIX のタイムスタンプとして取得するmktime() http://jp.php.net/manual/ja/function.mktime.php 現在の日付と曜日を取得できますので、現在の曜日さえ分かれば後は計算すれば簡単ですね 今日の日付を基に、今週の日曜日は何日か求める 日曜日を0として、0~6までの7回繰り返して表示 色はPHPではなく、HTMLの領域になります -------------------------- $today_week_jp = array("日","月","火","水","木","金","土");//日本語名を設定 $today_week_color = array("red","black","black","black","black","black","blue");//各曜日で色を指定 $sunday = date("j" , mktime(0, 0, 0, 0, date("d")-date("w"), date("Y")) );//今日の日付を基に、今週の日曜日は何日か求める for($i=0; $i<=6; $i++){ $weekday = $sunday + $i; echo '<font color="'.$today_week_color[$i].'">'.$today_week_jp[$i].$weekday."</font><br />"; //表示 } ------------------------------- これがベストな書き方ではありません もっと効率よく、汎用性の高い書き方も存在します あくまでもヒントとして考えてください

DEGI
質問者

お礼

時間がかかってしまいましたが何とかできました。 ただinu2さんのほどシンプルではなかったですけど… ありがとうざいました。

その他の回答 (3)

  • incho4649
  • ベストアンサー率64% (25/39)
回答No.4

少々勘違いしていました。 アクセスした当日を含む一週間の表示ですね、 仮にその一週間を日曜日から始まる一週間として 表示する場合、下記のようにします。 $w = date('w',time()); //今日の曜日を取得 $x = 0-=$w; //日曜日まで遡る日数を取得 for($i=0;$i<6;$i++){ $hinichi[$i] = date('j',strtotime("+$x days")); $youbi[$i] = date('w',strtotime("+$x days)); $x++;}

DEGI
質問者

お礼

解けました。かなり時間がかかりましたけど… 今後も課題はあるはずなので頑張ろうと思います。 アドバイスありがとうございました。

  • incho4649
  • ベストアンサー率64% (25/39)
回答No.3

こんにちは 課題の出題の趣旨がいまひとつよくわからないのですが、 「アクセスした日が13日、月曜なら」という部分の13日月曜が、 PHPが実行されているサーバまたはマシンのローカルタイムから取得されている物なら簡単です。 解答は for($i=-1;$i<6;$i++){ $hinichi[$i+=1] = date('j',strtotime("+$i days")); $youbi[$i+=1] = date('w',strtotime("+$i days));} とすることで $hinichi[0]~$hinichi[6]に昨日の日付から5日先までの日付が入ります。 同様に$youbi[0]~$youbi[6]には昨日の曜日から5日先の曜日までが入ります。 $youbi[n]に代入される曜日は0~6で表現されているので 曜日データの連想配列を作り、そこから呼び出せば「0~6」の要素を「日~土」に変更できます。 文字や色の変え方はHTMLに準拠するので コード内に<font color=***>や<b>をprintやechoで表示させてやれば、変更できます。

回答No.1

まず大事なのは順序を追って考える事です。プログラムは1行1行の処理を積み重ねて完成するものですから、一気に完成するものではありません。まずは、もし自分がその処理を手作業で行うにはどういう考え方をするか、という事を考えましょう。 例題は、その日が含まれる日曜日からの一週間の曜日と日付を表示する、ですね。 1)今日が何日なのか 2)直前の日曜日は何日なのか と、ここまではいいですか?直前の日曜日を知る方法ですが、PHPにプログラムを見ろとは言えません。だから計算で求める方法を考えないといけませんね。今日が月曜日であれば日曜日は1日前です。つまり今日の日付-1日=今週の日曜という事になりますね。 これで表示のスタート日付がわかりましたので、曜日、日付を7回繰り返して表示するだけです。プログラムに必要な考え方はこういう事です。「どう組むか」の考え方が一番大事で、PHPだなんだという言語の問題はその次の話になります。 それともう一つ大事なのは、PHPの役割はHTMLを出力する事です。ですから、期待する出力されたHTML、つまり最終計を理解しなければ、目的がわからないままプロセスを考える事になります。これでは暗闇の中ですね。ですから慣れないうちは「最終的にこういうHTMLを表示させる」という物を、普通のHTMLファイルとして作っておき、それにスクリプトを書き加えていくとういう方法が良いでしょう。 文字の色、太さ等はHTMLの文法の話なので本来PHPとは関係ないのですが、簡単に言うと太さは<b>等、色は<font color="color">等です。方法は一つではありませんし、厳密にはスタイルシートの利用が勧められますが、最初から色々考えると混乱するでしょうから、まあいいでしょう。 さてヒントを箇条書きしますね。 ・最初に最終形のHTMLファイルを作る ・getdate()関数を調べてみましょう。 学校の勉強ですし、自分でやらないと意味がないと思うので、あとはこのヒントから頑張ってみて下さい。

参考URL:
http://www.php.net/manual/ja/function.getdate.php
DEGI
質問者

お礼

順序良く分かりやすくアドバイスしていただきありがとうございます。 なんとか出来ました。 難しかったですが出来たときはうれしかったですね。初心者なんで余計に。今後も課題があるはずなので精進して行こうと思います。

関連するQ&A