- 締切済み
PHP5でカレンダーを作っています。2日おきに日付にマーカーが入るようにするには?
教えてください。 PHP5でカレンダーを作っています。 2日おきにカレンダーの日付にマーカーが入るようにしたいのですがどうもうまくいきません。 どのようなスクリプトを書けばよいのでしょうか? わかる方教えてください。
- みんなの回答 (7)
- 専門家の回答
みんなの回答
- Suzi
- ベストアンサー率38% (130/334)
7tv3mmさん,すみません。 「motokibさん」へとするところの名前を間違えてしまいました。 大変申し訳ありませんでした。
- 7tv3mm
- ベストアンサー率75% (12/16)
Suzi さん、ご指摘ありがとうございます。 言葉足らずで誤解があるといけませんので、補足ですが、 私もタイムスタンプでの処理の方がいいと思ってます。 質問者さんの目的のカレンダーから逸れてしまって申し訳ないですが、 趣味で作った万年カレンダー(紀元前2000年~西暦3000年[万年でないです])や バイオリズムの計算(1990年生まれの人が60歳になった時 = 2050年 など)で、 1970年以前や2038年以後のタイムスタンプを取得できなかった時、 アバウトに日数計算で処理したのを思い出し、投稿した次第です。 なので、質問者さんにも、その程度という内容で受け取って下さい。
お礼
Suziさん、7tv3mmさんアドバイスありがとうございます。 お二方のアドバイスを参考に試行錯誤した結果、 無事、考えていたカレンダーができました。 ありがとうございました。 またわからないことがありましたらアドバイスお願いします(^-^)。
- Suzi
- ベストアンサー率38% (130/334)
7tv3mmさん、こんにちは。 >>+$kankaku days ⇒ +$kankaku_day 以下のところの変更だと思われますが、そうだとしたらこれは間違っています。 date( 'md', strtotime("+$kankaku days", $start_day) ); これは、タイムスタンプ($start_day) から ●×日語のタイムスタンプを作り出す物です。 つまり今日から3日後のタイムスタンプだとしたら、 date( 'md', strtotime("+3 days", 今日) ); になります。 +/-数字 days/weeks/montshs/years で指定します。 ロジックは、 1) 開始する日と間隔を決め、開始する日から換算したマーカー日を決め、これらはすべてタイムスタンプに。 2) ループの中でその日を出力しようとする時、 a:その日がマーカー日よりも以前でしたらマーカー日はそのまま b:その日がマーカー日だったら、出力処理後、マーカー日を+間隔に変更 * その日付をマーカー日で比較する時は、月+日だけで一度タイムスタンプに出力した方が良いでしょう。 6月15日 14:23:02 と 6月15日 18:11:48 ではイコールにならないからです。月+日だけなら6月15日 00:00:00 になって統一できるからです。 こういう方法はより良いスマートなのも含めていろいろあると思います。
- 7tv3mm
- ベストアンサー率75% (12/16)
もう見ていないかもしれませんが、以前、万年カレンダーや バイオリズムの計算などの、タイムスタンプの範囲外も含めて 日数を計算した時、基軸となる年月日からの総日数で対応しました。 「2日おきにマーカー表示」という具合にアレンジすると、↓の感じです。 ttp://mfdl.hp.infoseek.co.jp/goo_php_q/20090606_php.txt (先頭のhは、外しています) $view_m の「表示したい年月」を変更して、2008年1月~同4月までは 確認しましたが、細かいところを端折っているので、それ以後の 年月でバグっているかもしれません。 タイムスタンプの範囲内だけなら、他の方が言われるように タイムスタンプで処理した方がスマートだと思います。
- Suzi
- ベストアンサー率38% (130/334)
補足への回答ありがとうございます。 「if($day % 3 == 1)」のところを以下のようにアレンジしてみるといかがでしょうか。 $m_num = $today[mon]; $d_num = $today[mday]; $year = $today[year]; $kankaku = '3'; # 日にちの間隔、 $kankaku += 1; $start_day = strtotime("$d_num $m_num $year "); # 開始する日 $marker_day = date( 'md', strtotime("+$kankaku days", $start_day) ); # マーカー日。0608とかに出力 ****ループ************** $this_tody = date( 'md', $today_2 ); # $today をタイムスタンプの$today_2に変換できることを願って if( $this_tody == $marker_day ){ print "マーカー処理"; $marker_day = date( 'md', strtotime("+$kankaku days", $today_2) ); } else print $today;
お礼
度々失礼します。 先ほどやってみましたが、すべての日付にマーカー(◎)が入ってしまいました。 以下のようにスクリプトを変更しました。 http://test.monki8.com/cal2_1.html 先ほどのアドバイスの関数に少し変更を加えました。 +$kankaku days ⇒ +$kankaku_day $this_tody ⇒ $this_today ****ループ************** ⇒ //****ループ************** print "マーカー処理"; ⇒ echo "<td align=\"center\"><a href=\"$PHP_SELF?$link\"><font size=\"3\" color=\"#0000cc\">$day</font></a><br>◎</td>\n"; print $today; ⇒ echo "<td align=\"center\"><a href=\"$PHP_SELF?$link\"><font size=\"3\" color=\"#0000cc\">$day</font></a></td>\n"; この変更が原因だったのでしょうか? ちなみにこのような結果になりました。 2009年6月 日 月 火 水 木 金 土 1 2 3 4 5 6 ◎ ◎ ◎ ◎ ◎ ◎ 7 8 9 10 11 12 13 ◎ ◎ ◎ ◎ ◎ ◎ ◎ 14 15 16 17 18 19 20 ◎ ◎ ◎ ◎ ◎ ◎ ◎ 21 22 23 24 25 26 27 ◎ ◎ ◎ ◎ ◎ ◎ ◎ 28 29 30 ◎ ◎ ※なぜか30日はマーカー(◎)なし
補足
ご回答ありがとうございます☆ さっそくやってみます。 結果は明日の夕方にまた報告させていただきます。 知識のない私にわかりやすく丁寧に教えてくださり嬉しいです。 感謝いたします。
- Suzi
- ベストアンサー率38% (130/334)
済みません、1ヶ月分のカレンダーだと思い込んでしまいました。 ループ付近のスクリプトをお知らせ願えますか。
補足
私の説明が足りず申し訳ございません。 よろしくお願いいたします。 このスクリプトですと、5月31日と6月1日にマーカー(◎)が 入ってしまうのです。(2日おきじゃない) 何か良い解決法がありましたらお教え願います。 http://test.monki8.com/cal2.html
- Suzi
- ベストアンサー率38% (130/334)
2日おきだから任意に指定し初日から3日目にマーカーが入れば良いのだと思います。 以下のでどうでしょうか。 $start_day = '5'; # 開始する日 $kankaku = '3'; # 日にちの間隔 $marker_day = $start_day + $kankaku; # 最初にマーカーする日 日付をprintするループの中に(カレンダー日付が $today とするのなら)、 if( $today == $marker_day ){ print "マーカー処理"; $marker_day = $today + $kankaku; }else print $today;
お礼
回答ありがとうございます。 さっそく実行してみます。
補足
先ほど実行してみましたが、私の知識不足が原因でループ処理のところから先に進めません。 再度、質問失礼します。 以下の用なカレンダーにしたいのですが、助言をお願いします。 2日おきにマーカー(◎)が入るようにしたい。 2009年5月 日 月 火 水 木 金 土 1 2 ◎ 3 4 5 6 7 8 9 ◎ ◎ 10 11 12 13 14 15 16 ◎ ◎ 17 18 19 20 21 22 23 ◎ ◎ ◎ 24 25 26 27 28 29 30 ◎ ◎ 31 2009年6月 日 月 火 水 木 金 土 1 2 3 4 5 6 ◎ ◎ 7 8 9 10 11 12 13 ◎ ◎ ◎ 14 15 16 17 18 19 20 ◎ ◎ 21 22 23 24 25 26 27 ◎ ◎ 28 29 30 ◎
お礼
Suziさん、7tv3mmさんアドバイスありがとうございます。 お二方のアドバイスを参考に試行錯誤した結果、 無事、考えていたカレンダーができました。 ありがとうございました。 またわからないことがありましたらアドバイスお願いします(^-^)。
補足
Suziさん、7tv3mmさんアドバイスありがとうございます。 さっそくお二人のアドバイスを参考にさせていただきカレンダーを修正したいと思います。 お二人の意見を聞いて、まだまだ自分にはPHPの知識が足りないと痛感しました。 また後で結果を報告させていただきたいと思います。