• ベストアンサー

if文の条件について

2008年の09月30日までは「テスト」と表示し、それ以降はなにも表示しないようにしようと思い、以下のように作成してみました。 ---------------------------------------------------------- <?php $year = date('Y'); $month = date('m'); $day = date('d'); if($year == 2008 and $month == 09 and $day <= 30){ echo 'テスト';} ?> -------------------------------------------------------------- けれど、なにも表示されませんでした。 ためしに else{ echo 'hoge';} をつけ加えてみると、「hoge」と表示されました。 どうして「テスト」と表示されず、elseの「hoge」と表示されてしまうのでしょうか? ご教授のほど、よろしくお願いいたします。

  • PHP
  • 回答数3
  • ありがとう数3

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

  • ベストアンサー
  • jk39
  • ベストアンサー率54% (366/670)
回答No.1

文字列と数値を混同しているからです。 date関数は文字列(string)で返されます。 http://jp2.php.net/date ですから、「$year == 2008」は文字列'2008'と、 数値2008を比較しているので、偽となります。

masarin16
質問者

お礼

ご回答ありがとうございます。 文字列となっていることには気づきませんでした。 検索エンジンで文字列を数値に変換する関数はないかとさがしたところ 「intval」という関数を見つけました。 ためしに <?php $year = intval(date('Y')); $month = intval(date('m')); $day = intval(date('d')); if($year == 2008 and $month == 9 and $day <= 30){ echo 'テスト';} ?> としたところ無事解決いたしました。

その他の回答 (2)

  • UmJammer
  • ベストアンサー率58% (115/196)
回答No.3

$monthの比較に問題があるようです。「09」という表記では8進数として解釈されていしまいます(8進数で09はあり得ませんが、表記方法の問題です)。  $month == 09 の部分は文字列として比較したいはずなので、ダブルクォーテーショ(又はシングルクォーテーション)で括って  $month == "09" とすれば期待通りの動作をするでしょう。 $year、$dayについても同様の記述をするのが妥当ですが、比較対象がそれぞれ「2008」と「30」なので10進数の数値型として比較されるためそのままでも通じてしまいます。 従って、厳密には適切ではありませんが  $month == 9 という記述も有効です。 日付けの大小比較自体はANo.2の方が書かれているようにタイムスタンプで比較する方法がよりスマートかと思います。

masarin16
質問者

お礼

ごていねいに教えてくださり、ありがとうございます。 たいへん勉強になりました。 今回はタイムスタンプを使い比較する方法で記述しようと思います。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

$month == 09 がまずいんじゃないですか? そもそもandでつないでチェックはできません。 このままだと2008/9/1~9/30しかチェックしていないでしょ? たとえば30日にオープンしたいならこんな感じで? <?php if(strtotime("2008/09/30") > mktime()){ echo 'close'; }else{ echo 'open'; } ?>

masarin16
質問者

お礼

ご回答ありがとうございます。 strtotime関数やmktime関数についていろいろと勉強することができました。 こちらのほうがスマートですので、こちらを採用したいと思います。

関連するQ&A

  • 日付の比較について

    最近PHPの勉強を始めた初心者です。 はじめて質問させていただきます。 2005-1-1から2020-12-31の間で入力した日付の曜日を表示するプログラムを作成しています。 2005-1-1から2020-12-31の間以外ならエラー表示するようにしたいのですが、 入力した日付との比較がうまくいかず、思うように動きません。 どのように直せばいいのかを教えていただけないでしょうか?よろしくお願いします。 <?php $year=$_POST["year"]; $month=$_POST["month"]; $day=$_POST["day"]; $date_str="$year-$month-$day"; $date_time=strtotime($date_str); $firstdate_str="2005-1-1"; $firstdate_time=strtotime($firstdate_str); $lastdate_str="2020-12-31"; $lastdate_time=strtotime($lastdate_str); if ($date_time < $firstdate_time || $date_time> $lastdate_time)  {  echo "Please enter a date between 1/1/2005 and 12/31/2020.";  } else  {  $finddate=date('l', mktime(0,0,0,$month, $day, $year));  echo "The day entered in on $finddate";  } ?>

    • 締切済み
    • PHP
  • jsでフラグ型をenum型に変えたい。

    以下のjavascript文があります。 [code] //平日ダイヤか土・休日ダイヤかを判定する function dayJudge(year, month, date, day) { //alert(year +" "+ month +" "+ date +" "+ day) //フラグ var weekdayFlag = true; //月?金なら立てる if(day >= 1 && day <= 5) weekdayFlag = day >= 1 && day <= 5;   else if(day==6) weekdayFlag2 = day == 6 else weekdayFlag = false; //祝日ならたおす if(year == 2013 && month == 1 && date == 1) weekdayFlag = false; else if(year == 2013 && month == 10 && date == 14) weekdayFlag = false; else if(year == 2015 && month == 3 && date == 21) weekdayFlag = false; return weekdayFlag; } [/code] をフラグ型から、enum型に変更できませんか。 フラグではAもしくはBといった2通りの回答しかございませんので、 3つめの分岐は作ることはシステム上無理なのです。 enum型なら、パターンはある程度余裕(無限じゃないかも)をもたせることできるからです。

  • IF条件文について

    こんばんわ 宜しくお願いします $time = time(); $ltime = localtime($time,1); $nowyear=$ltime["tm_year"] + 1900; $nowmonth= $ltime["tm_mon"] + 1; if ($nowmonth=12) { $nextmonth=1; } else { $nextmonth=$ltime["tm_mon"] + 2; } echo'<DIV CLASS="box10">'; echo'<strong><font size="4" color="black">'; echo $nextmonth . "月の商品です"; echo"</font></strong>"; echo"</DIV >"; 以上のように12月であった場合13月にならない様にしたいのですが常に1月が取得されてしまいます。 何がいけないのでしょうか?

    • ベストアンサー
    • PHP
  • カレンダーについて教えてください。

    phpでカレンダーを作っているのですが休日を設定したい場合 の方法がわかりません。 for文で日にちを表示させているのですが休日設定の配列の値を どのように参照すればいいかで悩んでおります。 // 現在の日付を取得 $year = date("Y"); $month = date("n"); $today = date("j"); // 休日を設定 $holyday = array('1', '5', '12', '28'); // カレンダー始まり echo "<table width='200' height='182' border='0'><tr><td valign='top'>"; echo "<table border ='0' bgcolor='#cccccc' cellspacing='1' cellpadding='3' width='170'><tr>\n"; echo "<td colspan='7' bgcolor='white' align='center' style='font-size:12px;font-weight:bold;color:#6666ff'>"; echo $year . "年" . $month . "月</td><tr>"; // 曜日表示部分 $weekday = array('Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'); for ($i = 0 ; $i < 7 ; $i++) { if ($i == 0 or $i == 6) { echo "<td class='head_" . $i . "'>"; } else { echo "<td class='head'>"; } echo $weekday[$i] . "</td>\n"; } echo "</tr>\n"; // 日数と曜日の計算 $days = cal_days_in_month (CAL_GREGORIAN, $month, $year); $week_start = jddayofweek (cal_to_jd(CAL_GREGORIAN, $month,1, $year) , 0); // 日付が始まる前の空白 for ($dot1 = 0 ; $dot1 < $week_start ; $dot1++) { echo "<td align='center' class='dot'></td>\n"; } // 日付表示部分 for ($day = 1 ; $day <= $days ; $day++) { if (($day+$week_start)%7 == 1) { // 日曜日 echo "<tr>\n<td class='sun'>$day</td>\n"; } else if (($day+$week_start)%7 == 0) { // 土曜日 echo "<td class='sat'>$day</td>\n</tr>\n"; } else if ($day == $today) { // 今日 echo "<td class = 'today'>$day</td>\n"; // ここで休日を表示させるのですが方法がわかりません。 } else if ($day == $holyday[0]) { // 休日 echo "<td class = 'holyday'>$day</td>\n"; } else { // 平日 echo "<td class='othr'>$day</td>\n"; } } // 最終日後の空欄の表示 $wend = 35 - ($days + $week_start); if ($wend < 0) { $wend += 7; } if ($wend == 7) { echo ''; } else if ($wend != 0) { for ($dot2 =0 ; $dot2 < $wend ;$dot2++) { echo "<td align='center' class='dot'></td>\n"; } } // カレンダー終り echo "</tr></table>\n"; echo "</td></tr></table>\n";

    • ベストアンサー
    • PHP
  • フラグから区分値に置換するにはどうすればいいですか

    フラグから区分値に置換するにはどうすればいいですか。 以下はその例文です。 フラグでは、基本的に立てたり、倒したりするもので、 yesかnoの2通りしか分岐をさせることができません。 つまり、else ifが使えないということです。 一方区分値は複数の分岐をさせることができます。 なので、これにはelse ifが使えます。 それはいかに記述があります。 https://www.gixo.jp/blog/382/ そこで、以下の部分を区分値に置換するにはどのようにすればいいですか。 フラグから区分値に置換した事例を紹介してくれているサイトは皆無です。 以下は、そのコードです。 function dayJudge(year, month, date, day) { //alert(year +" "+ month +" "+ date +" "+ day) var weekdayFlag = true; if(day >= 1 && day <= 5) weekdayFlag = true; else weekdayFlag = false; if(year == 2013 && month == 1 && date == 1) weekdayFlag = false; else if(year == 2013 && month == 10 && date == 14) weekdayFlag = false; return weekdayFlag; }

  • if関数で、aまたはbまたはcという選択できますか

    if関数で、aまたはbまたはcという選択できますか。 ver num=1; if(x=1||x=3||x=5){ console.log("true"); } else{ console.log("folse"); }。 といった書き方はできませんか。 //ダイヤタイプの定義 const diagram = { WeekDay: 1, //平日ダイヤ Holiday: 2, //休日ダイヤ A: 3, //Aダイヤ B: 4, //Bダイヤ C: 5, //Cダイヤ } //ダイヤを判定する function dayJudge(year, month, date, day) { //フラグ(初期値:平日ダイヤ) var diagramFlag = diagram.WeekDay; //土日判定 if(day == 0 || day == 6) { diagramFlag = diagram.Holiday; } //特別な日 if((month == 10 && date == 12)||(month == 11 && date == 3)||(month == 11 && date == 24)) { diagramFlag = diagram.A; } else if(month == 5 && date == 25) { diagramFlag = diagram.B; } else if(month == 5 && date == 30) { diagramFlag = diagram.C; } return diagramFlag; } ができなくて困っています。

  • PHPによるカレンダーについて

    PHPでカレンダーを作成しています。 プルダウンで年月を指定し、更新ボタンを押せば、指定した年月のカレンダーを表示させたいのですが、うまくいきません。 更新ボタンを押してもカレンダーが変わらないです。 KOMOカレンダーというサイトを参考にして、文字コードを変えただけです。 教えてくださる方がいらっしゃいましたら宜しくお願いいたします。 <?php $last_year = 2037; $wday_color = "#000000"; $sat_color = "#0000ff"; $sun_color = "#ff0000"; $reg_color = "#ffccff"; $year = (!isset($year)) ? date("Y") : $year; $month = (!isset($month)) ? date("n") : $month; ?> <HTML> <HEAD> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <TITLE>カレンダー</TITLE> </HEAD> <BODY> <P><FONT SIZE="6" COLOR="#006600">カレンダー</FONT></P> <P> <TABLE BORDER="1"CELLSPACING="1" CELLPADDING="1"> <TR> <TD COLSPAN="7"> <SELECT NAME="year"> <?php for($i = 2002; $i <= $last_year; $i++){ echo "<option value=".$i.(($i == $year) ? ' selected':'').">".$i."年\n"; } ?> </SELECT> <SELECT NAME="month"> <?php for($i = 1; $i <= 12; $i++){ echo "<option value=" . $i . (($i == $month) ? ' selected':'').">".$i."月\n"; } ?> </SELECT> <INPUT TYPE="SUBMIT" NAME="Submit" VALUE="更新"></TD> </TR> <TR> <TD> <P ALIGN="CENTER"><FONT COLOR="red">日</FONT> </TD> <TD> <P ALIGN="CENTER">月 </TD> <TD> <P ALIGN="CENTER">火 </TD> <TD> <P ALIGN="CENTER">水 </TD> <TD> <P ALIGN="CENTER">木 </TD> <TD> <P ALIGN="CENTER">金 </TD> <TD> <P ALIGN="CENTER"><FONT COLOR="blue">土</FONT> </TD> </TR> <?php $time = mktime(0, 0, 0, $month, 1, $year); $day_of_first = date("w", $time); $date_of_month = date("t", $time); $week_of_month = ceil($date_of_month / 7); if(($date_of_month % 7 > 7 - $day_of_first) || ($date_of_month % 7 == 0 && $day_of_first != 0)){ $week_of_month++; } for($i = 1; $i <= $week_of_month * 7; $i++){ if($i % 7 == 1){ echo "<tr>"; } if(($i - 1 < $day_of_first) || ($i > $date_of_month + $day_of_first)){ echo "<td>&nbsp;</td>"; }else{ if($i % 7 == 1){ $color = $sun_color; }elseif($i % 7 == 0){ $color = $sat_color; }else{ $color = $wday_color; } echo "<td width=30 height=30 align=right valign=top>"; echo "<font color=" . $color . ">"; echo $i - $day_of_first; echo "</font></td>"; } if($i % 7 == 0){ echo "</tr>\n"; } } ?> </TABLE> </FORM> </BODY> </HTML>

    • ベストアンサー
    • PHP
  • 該当日のスケジュール内容を別ウィンドウで表示したいのですが…。

    初めて質問させて頂きます。 プログラム初心者です。 今、課題でカレンダー作成(予定を表示させる)をしています。 現在の時点でカレンダーの指定日(予定のある日)にリンクをつけるところまでは出来たのですが、リンク先に移動した際に該当日の予定を表示させるのが出来なくて困っています。 (予定はCSVファイルからuploadしています。) どなたかお力を貸して頂けませんでしょうか??…orz。 宜しくお願いします。 ソースはこちらです。 …読みにくくてすみません(泣 <html> <head> <meta http-tquiv="Content-Type" content="text/html;charset=EUC-JP"> <title>カレンダー</title> </head> <form name="skl" method="post" action="yotei.php"> <body> <?php  $year = date("Y");  $month = date("n");  $day = date("j");  $year2=$_GET["year"];  $month2=$_GET["month"];  $day2=$_GET["day"]; //先月、来月をクリックした場合の処理  if($year2!="" || $month2!="" || $day2!="") {   if($year2!="") {    $year = $year2;   }   if($month2!="") {    $month = $month2;   }   if($day2!="") {    $day = $day2;   }else {    $day = 1;   }  } // カレンダー表示(先月の場合)  if($month==1) {   $year3 = $year-1;   $month3 = 12;  }else {   $year3 = $year;   $month3 = $month-1;  } // カレンダー表示(来月の場合)  if($month==12) {   $year4 = $year+1;   $month4 = 1;  }else {   $year4 = $year;   $month4 = $month+1;  } // テーブルの作成  print "<tableborder='1'><tr>";  print "<td width='250' align='center' bgcolor='yellowgreen' colspan='7'>";  print "<a href=\"?year=$year3&month=$month3\"><<</a>";  print " ".$year."年".$month."月のカレンダー ";  print "<a href=\"?year=$year4&month=$month4\">>></a></td></tr>";  print "<tr><td align='center' bgcolor='pink'>日</td>";  print "<td align='center' bgcolor='silver'>月</td>";  print "<td align='center' bgcolor='silver'>火</td>";  print "<td align='center' bgcolor='silver'>水</td>";  print "<td align='center' bgcolor='silver'>木</td>";  print "<td align='center' bgcolor='silver'>金</td>";  print "<td align='center' bgcolor='skyblue'>土</td></tr>";  $week = date(w,mktime(0,0,0,$month,1,$year));  for ($ix1 = 0 ; $ix1 < $week ; $ix1++) {   print "<td align='center'>-</td>";  } // ファイルの読み込み  $data = "date- data.CSV";  $file = fopen($data,"r");  while(!feof($file)){   $csv = fgets($file);   $csv = mb_convert_encoding($csv, "EUC-JP", "SHIFT-JIS"); //csvファイルを配列に格納   $str = explode(",", $csv);   for($day = 1 ; checkdate ($month,$day,$year) ; $day++) {    if($str[1] == "$year/$month/$day") {     $ymd[] = $str[1];    }   }  }  for($day = 1 ; checkdate ($month,$day,$year) ; $day++) {   print "<td align='center'";   if(($day+$week)%7 == 1 ) {    print "bgcolor='pink'><font color='red'>";   }else if(($day+$week)%7 == 0 ) {    print "bgcolor='skyblue'><font color='blue'>";   }else {    print "bgcolor='wheat'>";   }   for($i=0 ; $i<count($ymd) ; $i++) {    if($ymd[$i] == "$year/$month/$day") {     print "<a href=yotei.php>";    }   }   print "$day</td>";   if(($day+$week)%7 == 0 ) {    print "</tr>";   }  }  fclose($file);  $weekend = date(w,mktime(0,0,0,$month,$day,$year));  for ($ix2=0 ; $ix2<(7-$weekend) ; $ix2++) {   if ($weekend != 0) {    print "<td align='center'>-</td>";   }  }  print "</tr>";  print "</table>"; ?> <table border='0'> <tr> <td width="250"> <div align="center"> <input type="button" value="ファイル参照画面へ戻る" onClick="location.href='upload.php'" name="button"> </div> </td> </tr> </table> <br><br> </body> </form> </html>

    • 締切済み
    • PHP
  • プログラムの内容

    以下のプログラムは答えとして渡されたものなんですが、 コマンド引数を使ったプログラムの流れがよくわかりません。 簡単に解説してくれる方、いませんか? #include <stdio.h> int leapyear(int year){ if(year%400 == 0) return 1; else if(year%4 == 0 && year%100 != 0) return 1; else return 0; } void addmonth(int *day, int *month, int *year){ *day = 1; (*month)++; if(*month > 12) { *month = 1; (*year)++; } } int main(int argc, char *argv[]){ int year, month, day, a=0, max_days; int month_days[12] = {31,28,31,30,31,30,31,31,30,31,30,31}; if(argc < 2) max_days = 10000; else max_days = atoi(argv[1]); printf("今日は西暦何年 何月 何日? "); scanf("%d%d%d",&year,&month,&day); while(a<max_days) { a++; day++; if(month == 2 && leapyear(year)) { if(day > 29) addmonth(&day, &month, &year); } else { if(day > month_days[month-1]) addmonth(&day, &month, &year); } } printf("今日から%d日後は、%d年%d月%d日です。",max_days, year, month, day); }

  • PHPでカレンダー

    PHPを使ってカレンダーを作成しました。が、コードの意味が良く分かりません。 コードは以下の通りです。 <?php if($_GET['num']==''){ $today_year = date("Y"); //4桁の西暦年 $today_month = date("n"); //1~12の月 }else{ $timestamp = mktime(0,0,0,date("n")+$_GET['num'],date("d"),date("Y")); $today_year = date("Y",$timestamp); $today_month = date("n",$timestamp); //1~12月 } $current = mktime(0,0,0,$today_month,1,$today_year); $first_day = date("w",$current); //1日の曜日を0~6に当てはめる $last_day= date("t",$current); //月の日数 ?> <html> <head> <title>カンレンダー</title> <meta http-equiv="Content-Type" content="text/html; charset=euc-jp"> </head> <body> <h1><?php print (date("Y年m月",$current)); ?>のカレンダー</h1> <table border="1" cellpadding="0" cellspacing="2"> <tr> <th>日</th><th>月</th><th>火</th><th>水</th><th>木</th><th>金</th><th>土</th> </tr> <?php for($i=1; $i<=$first_day+$last_day; $i++){ if($i%7==1){print ("<tr>");} if($i>$first_day){ print ("<td>".($i-$first_day)."</td>"); }else{ print ("<td>&nbsp;</td>"); } if($i%7==0){print ("</tr>");} } ?> </table> </body> </html> for以降の部分が良く分かりません。よろしくお願いします。※上記のスクリプトで正しく表示されることは確認済です。

    • 締切済み
    • PHP

専門家に質問してみよう