プロが教える店舗&オフィスのセキュリティ対策術

いつもお世話になっております。

カレンダー一覧表示プログラムがあります。
http://lab.crahadoll.net/samples/script_euc/chap …

プログラムは下記になります。
http://lab.crahadoll.net/samples/script_euc/chap …
すみませんが、共に文字コードを「EUC」に変更してください。


これは、チェックボックスから年・月を選択し、
「月表示」をクリックすることにより
月一覧が表示されるというプログラムです。

2012▼ 01▼ [月表示]

日付
2012/01/01
2012/01/02
2012/01/03
2012/01/04
(省略)
2012/01/31


これを下記のように、
週表示にし1時間30分置きの表示を考えております。


2012▼ 01▼ 01▼ [週表示]

日付
2012/01/01 00:00
        01:30
        03:00
        (省略)
        21:00
        22:30
2012/01/02 00:00
        01:30
        (省略)
        22:20
2012/01/03
(省略)
2012/01/06

どのような変更を加えれば、
当問題はクリアーできますでしょうか?
なにとぞご教授のほどよろしくお願いします。

A 回答 (5件)

・週コンボを追加


・指定年月週は何日か取得(日曜日を週初?)
・0:00~22:30の出力

やりたい事が分かればプログラムを書けるハズ。
    • good
    • 0

指定した年月日の週初の日付を求める。



これさえクリアすれば後は問題と言うほどのものではないかと思います。

この回答への補足

お世話になっております。
皆様のご意見により、
下記のようなスクリプトの形となりました。
が、なぜかif/elseの条件がperse_errorによりなりたちません。
if/ifはうまくいきますが、
if/elseがうまくいかないのです。

どこがいけないのでしょうか?

また、下記スクリプトにて
「ここは変更した方がよい」
という箇所等ございましたら、
あわせてご教授頂きたいと思います。

よろしくお願いします。


<table border="1">
<tr bgcolor="#ffd700">
<td>日付</td>
</tr>

<?php
$yyyy = 2006;
$mm = 8;
$ww = 2;

$wd1 = date("w", mktime(0, 0, 0, $mm, 1, $yyyy));
echo "<p>wd1 ".$wd1;

$wd1 = date("w", mktime(0, 0, 0, $mm, 1, $yyyy));
$wd2 = 7 * $ww - $wd1;
echo "<p>wd2 ".$wd2;

$d = 0;
$lastd = date("d", mktime(0, 0, 0, $mm + 1, 0, $yyyy));
echo "<p>lastd ".$lastd;

if ($ww == 1)
{
for ($i = 1; $i <= $wd2; $i++)
{
?>
<tr>
<?php
$ts = mktime($hh, $u, 0, $mm, $i, $yyyy);
$ymd = date("Y/m/d H:i", $ts);
?>
<td><?= $ymd ?></td>
<?php } ?>
<?php } ?>

<?php
if ($ww == 2)
//else
{
for ($i = $wd2 + 1; $i <= min($wd2 + 7,$lastd); $i++)
{
?>
<tr>
<?php
$ts = mktime($hh, $u, 0, $mm, $i, $yyyy);
$ymd = date("Y/m/d H:i", $ts);
?>
<td><?= $ymd ?></td>
<?php } ?>
<?php } ?>

</table>

補足日時:2006/07/07 18:07
    • good
    • 0

1時間30分おきの表示は普通にできますよね?



それで、週表示ですが、
1.選択されている月の日数を取得
2.選択された年月の1日の曜日を取得
3.その二つを使用して何週あるかを取得
4.コンボボックスに表示
という流れになると思います。

年月日関係は全部 date() コマンドで取得できるはずですのでがんばって!!!

参考URL:http://jp2.php.net/manual/ja/function.date.php

この回答への補足

>1時間30分おきの表示は普通にできますよね?

すみません。
第一段階から理解できておりません。

90分(1時間30)で回して、
月末に処理を停止するスクリプトを作成しましたが、
最初の1:30は正常に出力されるのですが、
その後、1:30 1:31 1:32となってしまいます。
また、月末までループ処理させたいのですが、
この処理が正常にいけば、月末で止まりますか?
よろしくお願いします。

<?php
$lastd = date("Y 年 m 月 h時 i分", mktime(0, 0, 0, $mm, 1, $yyyy));
for ($u = 90; $u <= $lastd; $u++) {
?>
<tr>
<?php
$ts = mktime($hh, $u, 0, $mm, 1, $yyyy);
$ymd = date("Y/m/d H:i", $ts);

?>
<td><?= $ymd ?></td>
<?php } ?>

補足日時:2006/07/05 10:04
    • good
    • 0
この回答へのお礼

補足の件ですが、
下記の通りできましたので、
難問に取り掛かりたいと思います。

<?php
$lastd = date("d", mktime(0, 0, 0, $mm + 1, 0, $yyyy));
for ($i = 1; $i <= $lastd; $i++)
for ($u = 0; $u <= 1439; $u+=90) {
?>
<tr>
<?php
$ts = mktime($hh, $u, 0, $mm, $i, $yyyy);
$ymd = date("Y/m/d H:i", $ts);

?>

<td><?= $ymd ?></td>
<?php } ?>

お礼日時:2006/07/05 15:26

#1です。


週から日を取得するやつを前に作った事があります。

//############################################################
// 月初曜日取得関数
//概要 指定年月の月初曜日を取得する
//引数 $Date : 日付(yyyy-mm-dd)
//戻り値0:日曜 1:月曜 ・・・ 5:金曜 6:土曜
//############################################################
Function Get_FirstWeekday($Date) {
$Date = Date("Y-m", StrToTime($Date))."-01";
$Week = Date("w", StrToTime($Date));

Return $Week;
}


//############################################################
// 月末日取得関数
//概要 指定年月の月末日を取得する
//引数 $Date : 日付(yyyy-mm-dd)
//戻り値月末日
//############################################################
Function Get_LastDay($Date) {
$Year = Date("Y", StrToTime($Date));
$Month = Date("m", StrToTime($Date));

Switch ($Month) {
Case 1:
Case 3:
Case 5:
Case 7:
Case 8:
Case 10:
Case 12:
$LastDay = 31;
Break;

Case 4:
Case 6:
Case 9:
Case 11:
$LastDay = 30;
Break;

Case 2:
If (($Year % 4 == 0 And $Year % 100 <> 0) Or $Year % 400 == 0) {
$LastDay = 29;
} Else {
$LastDay = 28;
}
}

Return $LastDay;
}


//############################################################
// 指定日取得関数
//概要 指定年月、N週、N曜日の日を取得する
//引数 $Year : 年
//$Month : 月
//$WeekNum : N週
//$Weekday : N曜日(SUN,MON,TUE,WED,THU,FRI,SAT)
//戻り値日
//############################################################
//指定された曜日の日を取得
Function Get_Week2Day($Year, $Month, $WeekNum, $Weekday) {
//曜日に合ったインデックスを取得
Switch (StrToUpper($Weekday)) {
Case "SUN":Case 0: $Weekday = 0; Break;
Case "MON":Case 1: $Weekday = 1; Break;
Case "TUE":Case 2: $Weekday = 2; Break;
Case "WED":Case 3: $Weekday = 3; Break;
Case "THU":Case 4: $Weekday = 4; Break;
Case "FRI":Case 5: $Weekday = 5; Break;
Case "SAT":Case 6: $Weekday = 6; Break;
}
//月初の曜日
$FirstWeekday =Get_FirstWeekday($Year."-".$Month."-01");

//指定曜日が月初曜日より手前の場合
If ($Weekday < $FirstWeekday) {
$Day = (($WeekNum - 1) * 7) + ($Weekday + 1) + (7 - $FirstWeekday);

//指定曜日が月初曜日以降の場合
} Else {
$Day = (($WeekNum - 1) * 7) + $Weekday - ($FirstWeekday - 1);
}

Return $Day;
}

ご参考までに。月末日を取得するやつも必要ですね。
必ず7日間ループすわけではないので。

この回答への補足

お世話になっております。
皆様のご意見により、
下記のようなスクリプトの形となりました。
が、なぜかif/elseの条件がperse_errorによりなりたちません。
if/ifはうまくいきますが、
if/elseがうまくいかないのです。

どこがいけないのでしょうか?

また、下記スクリプトにて
「ここは変更した方がよい」
という箇所等ございましたら、
あわせてご教授頂きたいと思います。

よろしくお願いします。


<table border="1">
<tr bgcolor="#ffd700">
<td>日付</td>
</tr>

<?php
$yyyy = 2006;
$mm = 8;
$ww = 2;

$wd1 = date("w", mktime(0, 0, 0, $mm, 1, $yyyy));
echo "<p>wd1 ".$wd1;

$wd1 = date("w", mktime(0, 0, 0, $mm, 1, $yyyy));
$wd2 = 7 * $ww - $wd1;
echo "<p>wd2 ".$wd2;

$d = 0;
$lastd = date("d", mktime(0, 0, 0, $mm + 1, 0, $yyyy));
echo "<p>lastd ".$lastd;

if ($ww == 1)
{
for ($i = 1; $i <= $wd2; $i++)
{
?>
<tr>
<?php
$ts = mktime($hh, $u, 0, $mm, $i, $yyyy);
$ymd = date("Y/m/d H:i", $ts);
?>
<td><?= $ymd ?></td>
<?php } ?>
<?php } ?>

<?php
if ($ww == 2)
//else
{
for ($i = $wd2 + 1; $i <= min($wd2 + 7,$lastd); $i++)
{
?>
<tr>
<?php
$ts = mktime($hh, $u, 0, $mm, $i, $yyyy);
$ymd = date("Y/m/d H:i", $ts);
?>
<td><?= $ymd ?></td>
<?php } ?>
<?php } ?>

</table>

補足日時:2006/07/07 18:07
    • good
    • 0

ちょっと気になったので。



#4さんの関数の中に
StrToTime()
というのがありますが、これはこんな感じですよね。

function StrToTime($date){
list($Y,$m,$d) = sscanf($date, "%d-%d-%d");
$time = mktime(0,0,0,$m,$d,$Y);
return $time;
}

ところで、Get_LastDayはdate関数もっとスマートになります。

function Get_LastDay($date){
$lastdate = date("t",StrToTime($date));
return $lastdate;
}

> naktak様へ
すみません、横やり入れまして。ちょっと気になったもので。。。

この回答への補足

お世話になっております。
皆様のご意見により、
下記のようなスクリプトの形となりました。
が、なぜかif/elseの条件がperse_errorによりなりたちません。
if/ifはうまくいきますが、
if/elseがうまくいかないのです。

どこがいけないのでしょうか?

また、下記スクリプトにて
「ここは変更した方がよい」
という箇所等ございましたら、
あわせてご教授頂きたいと思います。

よろしくお願いします。


<table border="1">
<tr bgcolor="#ffd700">
<td>日付</td>
</tr>

<?php
$yyyy = 2006;
$mm = 8;
$ww = 2;

$wd1 = date("w", mktime(0, 0, 0, $mm, 1, $yyyy));
echo "<p>wd1 ".$wd1;

$wd1 = date("w", mktime(0, 0, 0, $mm, 1, $yyyy));
$wd2 = 7 * $ww - $wd1;
echo "<p>wd2 ".$wd2;

$d = 0;
$lastd = date("d", mktime(0, 0, 0, $mm + 1, 0, $yyyy));
echo "<p>lastd ".$lastd;

if ($ww == 1)
{
for ($i = 1; $i <= $wd2; $i++)
{
?>
<tr>
<?php
$ts = mktime($hh, $u, 0, $mm, $i, $yyyy);
$ymd = date("Y/m/d H:i", $ts);
?>
<td><?= $ymd ?></td>
<?php } ?>
<?php } ?>

<?php
if ($ww == 2)
//else
{
for ($i = $wd2 + 1; $i <= min($wd2 + 7,$lastd); $i++)
{
?>
<tr>
<?php
$ts = mktime($hh, $u, 0, $mm, $i, $yyyy);
$ymd = date("Y/m/d H:i", $ts);
?>
<td><?= $ymd ?></td>
<?php } ?>
<?php } ?>

</table>

補足日時:2006/07/07 18:08
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!