こんばんは。お世話になっております。
書籍にあった下記のソースを参考に、1週間単位で表示(および週単位で移動)させたいと考えているのですが、for文などの応用が出来ず、アドバイスを頂戴できればと投函させて頂きました。
お忙しい中恐縮ですが、お力いただけたら幸いです。
描いている表示
<< >>
日 月 火 水 木 金 土
24 25 26 27 28 29 30
<?php
//感じなところでしょうが文字数制限のため省略。
//フォームにて、西暦、月を取得
//yyyy = $_POST["yyyy"];
//$yyyy = date("Y");
//$mm = date("m");
echo "<table border=\"1\">";
echo "<tr><td>日</td><td>月</td><td>火</td><td>水</td><td>木</td><td>金</td><td>土</td></tr>";
$wd1 = date("w", mktime(0, 0, 0, $mm, 1, $yyyy));
$d = 0;
$lastd = date("d", mktime(0, 0, 0, $mm + 1, 0, $yyyy));
for ($i = 0; $i <= 5; $i++) {
if ($d >= $lastd) {break;}
echo "<tr>";
for ($j = 0; $j <= 6; $j++) {
$d = $i * 7 + $j - $wd1 + 1;
if ($d > $lastd or $d < 1) {
echo "<td></td>";
}
else {
echo "<td>";
}
echo $d;
echo "</td>";
}
}
echo "</tr>";
}
echo "</table>";
丸投げのようで、すみません。そんなつもりはないのですが・・・要領が掴めず困っております。
No.3ベストアンサー
- 回答日時:
どもですがるです。
まぁ日付けのプログラミングは、一度「日付け」というもの自体について色々と知ったほうがよい、ってのはあるのですが。
今回のケース。ぢつは「ユリウス日」ってのの知識があるとものごっつく「楽」になりますし。
んで、書かれているソースですが。2点ほど。
まず
echo "<a href=\"./sukejuuru.php?d=$w_last\"><</a>";
echo " ";
echo "<a href=\"./sukejuuru.php?d=$w_next\">></a>";
ですが。これだとNGですね。
年と月も一緒に渡してあげないと、月またぎ年またぎですぐに変な動作しちゃいます。
if($_GET["d"]<>""){
$dd = $_GET["d"];
}
について、月と年でもやってあげるとよいかと思います。
あともう一つは。
$w_last = $dd-7;
$w_next = $dd+7;
の値が、時々31越えたりマイナスに食い込んだりするのですが。
まぁ「年月」渡しておけば計算は出来るのでさほど問題ないです。
ただ、見た目が気になるようなら、
$awk = split("-", date("Y-m-d", mktime(0, 0, 0, $mm, $w_last, $yyyy)));
を使って整理してあげてもよい…かもしれません。
多分もうほんのちょっとだと思いますので。
頑張ってください~ ^^
この回答への補足
galluda様
こんばんは。お世話になっております。
あれから、月・年を渡すためのスクリプトを考えているのですが、前後の月・年はどのように取得したら良いのでしょうか?
お教えいただいた「ユリウス日」も目を通しているのですが、一意性が見出せずに居る次第です。
galluda様にしてみればソースを書き込んだ方が楽かとは思いますが、今一度ヒントとなる考え方などをお教え頂けないでしょうか?
ごゆっくりされているなか(もう大晦日なので)恐縮ですが、引き続きご指導頂けたら幸いです。宜しくお願い致します。
galluda様
こんばんは。お世話になっております。
ユリウス日ですか・・・とても奥が深そうですね・・。
プログラミングにおいて、思わぬところで1つボキャブラリが増えたような気がします。ちょっと得した気分(笑)。
なんて冗談交じりですが、この貴重なアドバイス。今後のためにも少しずつでも理解を深めていきたく思っております。
と、取り急ぎご挨拶まで。
貴重なヒントを有難う御座いました。追ってご報告を兼ねてご連絡させて頂きます!
No.2
- 回答日時:
がるです。
> 翌週への移動など
でヒントをひとつ。
基本的に、whileループの直前のタイミングでの$ddが「スタートの日付」になっています。
つまり「そのタイミングで$ddになにが入っているか」がとても重要になるわけですね。
後は「どんなパラメタを渡すか」になるかと思います。
色々試行錯誤などしてみてください。
この回答への補足
galluda様
あけましておめでとう御座います。
お返事遅れて申し訳ありませんでした。最後に回答いただいた場所は既に空きがなく、こちらからご報告を兼ねたご挨拶をさせて頂きます。
あれから試行錯誤を繰り返し、些か最初の内容とは違ったものではありますが、ようやく描いていたものを作成する事が出来ました。(もちろん100%ではありませんが・・)
これもgalluda様のアドバイスあっての事、感謝しております。有難う御座いました。
galluda様
こんばんは。あれから試行錯誤を繰り返し、とりあえず下記のようなソースになりました。
今のところ、なんとか正常に動作しておりますが、GETで渡す値に「これで良いのか?」と疑問が残るところもあり、検証しては頂けないでしょうか?・・・今までDBからの検索が主だったため(とは言っても、検索も適切か?は不安があるのですが)、初めてのことが多く、特に日付に関するプログラミングは全く自信がないのです。
お忙しいところお手数お掛けし恐縮ですが、宜しくお願い申し上げます。
$yyyy = date("Y");
$mm = date("m");
$dd = date("d");
$today = $dd;
if($_GET["d"]<>""){
$dd = $_GET["d"];
}
else{
// 指定された日付けを含む週の「日曜日」の日付けを取得
$w = date("w", mktime(0, 0, 0, $mm, $dd, $yyyy));
$dd -= $w;
}
$w_last = $dd-7;
$w_next = $dd+7;
// ここから本当のスタート
echo "<a href=\"./sukejuuru.php?d=$w_last\"><</a>";
echo " ";
echo "<a href=\"./sukejuuru.php?d=$w_next\">></a>";
echo "<table border=\"1\">";
echo "<tr><td><font color=\"#ff0000\">日</font></td><td>月</td><td>火</td><td>水</td><td>木</td><td>金</td><td><font color=\"#0000ff\">土</font></td></tr>";
echo "<tr>\n";
$i = 0;
while($i++ < 7) {
// 年月日を取得:本当は関数とかクラスのほうがベター
$awk = split("-", date("Y-m-d", mktime(0, 0, 0, $mm, $dd, $yyyy)));
// 表示
if($awk[1]==$mm AND $awk[2]==$today){//現在日時を太文字で表示するため
echo "<td><b>".$awk[1]."/".$awk[2]."</b></td>\n";
}
else{
echo "<td>".$awk[1]."/".$awk[2]."</td>\n";
}
// 日付けを一つ繰り上げる
$dd ++;
}
echo "</tr>\n";
echo "</table>\n";
?>
No.1
- 回答日時:
がると申します。
んと………ちと説明が長くなりそうなので。珍しく、ソースを貼り付けてみます。
コメントとかから、挙動を少し追いかけてみていただけるとうれしいです。
// ここは実際には適宜パラメタとかから取得してください。
// このデータはテスト用ってことで
$yyyy = 2006;
$mm = 12;
$dd = 28;
// 指定された日付けを含む週の「日曜日」の日付けを取得
$w = date("w", mktime(0, 0, 0, $mm, $dd, $yyyy));
$dd -= $w;
// ここから本当のスタート
echo "<table border=\"1\">";
echo "<tr><td>日</td><td>月</td><td>火< /td><td>水</td><td>木</td><td>金< /td><td>土</td></tr>";
echo "<tr>\n";
$i = 0;
while($i++ < 7) {
// 年月日を取得:本当は関数とかクラスのほうがベター
$awk = split("-", date("Y-m-d", mktime(0, 0, 0, $mm, $dd, $yyyy)));
// 表示
echo " <td>" . $awk[2] . "</td>\n";
// 日付けを一つ繰り上げる
$dd ++;
}
echo "</tr>\n";
echo "</table>\n";
とりあえずこれで「1週間単位で表示」は可能だと思います。
この回答への補足
追加のような質問で恐縮ですが、投函時はあくまで日付だけの表示ではありましたが、日付の表示を「12/29」としたり、または週間表示のはじめに「12月」のように月も含めた表示をした方が良いかと、翌週へのリンク設定も含めて試しているのですが、思うような結果を得られずにおります。
下記ソースは、翌週(前の週)にリンク設定すべく、がる様のソースにそのまま追加記述したものですが、月の表示はともかく、おかしなソースになってはいないか?そもそも月を得るためには日付の増減だけで出来るのか?と思い、ご指摘も含め、改めてご指導頂ければと記載いたしました。
とりあえず、下記ソースで週の前後の移動は出来るのですが、月表示も含め、引き続きアドバイスなど頂けたら幸いです。
if($_GET["d"]<>""){
$w = $_GET["d"];
}
else{
// 指定された日付けを含む週の「日曜日」の日付けを取得
$w = date("w", mktime(0, 0, 0, $mm, $dd, $yyyy));
}
$dd -= $w;
$w_last = $w-7;
$w_next = $w+7;
// ここから本当のスタート
echo $mm;
echo "<br>";
echo "<a href=\"./calendar.php?d=$w_next\"><</a>";
echo " ";
echo "<a href=\"./calendar.php?d=$w_last\">></a>";
galluda様
こんばんは。いつもお世話になっております。
>珍しく、ソースを貼り付けてみます。
本当ですね!ご回答してくださった内容を見て、「おー!」って思っちゃいました^^
なんて、冗談交じりの挨拶に恐縮ですが、まずはご挨拶にとお礼をさせて頂きます。
翌週への移動など、課題も残されているので、ご提示してくださったソースを参考に試したいと思います。
追ってご報告を兼ねてご連絡させて頂きます。
早速のご回答をありがとう御座いました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP htmlで複数の個数入力欄を表示させるには 1 2022/09/20 03:11
- MySQL SQL任意に並び替えをしたい 2 2023/08/28 10:47
- HTML・CSS テーブルタグのセルの幅の一部だけを指定 1 2023/03/12 12:02
- AJAX JavascriptからPHPへのAjax通信でnullが返ってくる 3 2022/08/03 22:00
- JavaScript EasyUIのSubGrid(jquery)におけるObjectに入れた連想配列について 1 2022/05/02 11:21
- Visual Basic(VBA) Selenium.ChromeDriverの使い方について 7 2022/09/22 06:43
- HTML・CSS 【CSS】:hasで可能? imgを含むtr要素を選択したい 1 2022/11/17 14:36
- JavaScript jQueryで同じクラス名のものを別物として扱いたい 1 2022/06/17 14:14
- HTML・CSS 自身のHPにYouTube動画を貼り付けるのが出来なくなり困ってます 1 2022/11/11 10:44
- 工学 【制御工学】単位ステップ応答の遅れ時間の求め方(令和2年度の機械設計技術者試験(制御工学)の問題) 3 2022/11/02 10:51
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
switch()文で値の大小比較
-
Dosブロンプトでtabを出力したい
-
shシェルスクリプト 空白行の...
-
phpでcookieがうまく保存されない
-
PHPで値を表示する「echo」「pr...
-
バッチファイルでpingの結果を...
-
バッチファイルで、全てのウィ...
-
ウイルスもどき
-
bashの関数の引数にスペースが...
-
PHPで訪問回数を表示するカウン...
-
PHPにて変数をテキストファイル...
-
$_POST,$_GETの値が空...
-
pdftkを使った処理をバッチファ...
-
PHPでの分岐
-
全角を半角にして、整数か小数...
-
PHPでのパスワード制限のセキュ...
-
小数点以下0の非表示
-
syntax error, unexpected 'ech...
-
1週間カレンダー
-
配列の値を可変変数を用いて取...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Dosブロンプトでtabを出力したい
-
switch()文で値の大小比較
-
phpでcookieがうまく保存されない
-
バッチファイルでpingの結果を...
-
shシェルスクリプト 空白行の...
-
syntax error, unexpected 'ech...
-
findstrのerrorlevel
-
バッチファイルで、全てのウィ...
-
PHPで訪問回数を表示するカウン...
-
PHP一覧表示した項目にリンクを...
-
DBのハッシュ化したパスワード...
-
小数点以下0の非表示
-
Windowsのsetコマンドでの小数...
-
オブジェクトの中身の判定(PHP)
-
bashの関数の引数にスペースが...
-
PHPでのパスワード制限のセキュ...
-
RSSにdiv,ul classを付けたいの...
-
pdftkを使った処理をバッチファ...
-
ゼロとNULLを区別して number_f...
-
コマンドプロンプト フォルダ内...
おすすめ情報