日付表示に関する問題

このQ&Aのポイント
  • データベースの任意のフォームから取得した日付を表示する方法で問題が発生しています。
  • 現在の日付以降のデータが表示されず、過去の日付が表示されることがあります。
  • 解決策が見つかっておらず、困っています。
回答を見る
  • ベストアンサー

日付の表示~どこがおかしいでしょうか?~

「データベースの任意のフォーム(テスト日付リスト)から今日以降の日付のデータを取得し、日付が近い順にwebページに表示する」方法を考えています。 下記のスクリプトですとデータベースの任意のフォームには9月内の日付リストが存在するのに、webページでは今月(9月)分の日付のデータは表示されず、10/1以降の日付のデータが取り出されてしまいます。 =========== <? define("FORMID_TEST", "テスト日付リスト"); function getTestDayList() { global $NBCLIENT; $testdaylist = array(); $datalist = $NBCLIENT->search(FORMID_TEST,$conditions); if (is_array($datalist)) { $testdaylist = $datalist; } return $testdaylist; } function cmp($a, $b){ $x=$a["テスト日付"]; $y=$b["テスト日付"]; if($x == $y){ return 0; } return ($x < $y) ? -1 : 1; } $seminarsortlist = getSeminarSortList(); usort($seminarsortlist, "cmp"); $today = time(); foreach ($seminarsortlist as $seminarsort) { ?> <? $view = date_format("Ymd",$seminarsort["テスト日付"]); $y = substr("$view",0,4); $m = substr("$view",4,2); $d = substr("$view",6,2); $viewflug = mktime(0,0,0,$d,$m,$y); ?> <? if ($viewflug - $today < 86400) { ?> <?=hs($seminarsort["テスト日付"]) ?> <? } ?> <? } ?> =========== どうしても解決できません。 よろしくお願いいたします。

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

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

  • ベストアンサー
  • tecinfo
  • ベストアンサー率52% (32/61)
回答No.1

あまり自信はありませんが。 > $viewflug = mktime(0,0,0,$d,$m,$y); mktime(0,0,0,$m,$d,$y);では無いでしょうか? これで、判定条件がおかしくなって、10月のデータが表示されてしまっているということはありませんか? あと、質問の冒頭で「今日以降の日付のデータを取得し」とありますが、 <? if ($viewflug - $today < 86400) { ?> これは今日以前のデータを表示しようとしていませんか?

参考URL:
http://jp2.php.net/manual/ja/function.mktime.php
wf3255
質問者

お礼

思いっきりおっしゃる通りでした^^; 解決できました。 本当に有難うございます。

関連するQ&A

  • DBから昨日以前の日付のデータ呼び出し

    データベースから昨日以前の日付のデータを呼び出すやり方がわからず 質問です。対象となっているデータは日記とかです。 データベースに格納されている日付形式はyyyy-mm-ddです。 $sdateはWebページ内でgetTestList関数呼び出し時に当日の日付をyyyy-mm-dd形式で指定します。 getTestList関数の宣言は下記のとおりで、 日付に関しての$conditionsを記載しなければ正常にデータが呼び出されます。 function getTestList($sdate) { global $NBCLIENT; $testlist = array(); $conditions["テスト"] = "テストする"; //ここがわかりません↓ $conditions["日付"] = "<= $sdate"; //わからないところはここまでです $datalist = $NBCLIENT->search(FORMID_TEST, $conditions); if (is_array($datalist)) { $testlist = $datalist; } return $testlist; } わからないのは↑のコメント部分です。 $conditions["日付"] = "<= $sdate"; をどのように書いたら昨日以前のデータが呼び出されるでしょうか? よろしくお願いします。

    • ベストアンサー
    • PHP
  • 日付が近い順に表示

    現在下記スクリプトでデータベースから日付を取り出し、 あるWebページにて表示させています。 しかしこの方法だとデータベースのレコードID順に表示されてしまうため、日付順になりません。 ======== <? function getDayList() { global $NBCLIENT; $daylist = array(); $datalist = $NBCLIENT->search(FORMID_DAYLIST); if (is_array($datalist)) { $daylist = $datalist; } return $daylist; } $daylist = getDayList(); foreach ($daylist as $day) { ?> <?=hs($day["日付"]) ?> <? } ?> ======== ~.htmlページのweb表示内容~ 2007-09-14 2007-09-18 2007-09-15 ・ ・ ・ ~~~~~~~~~~~~~~ データベースからの呼び出し順は他のページの表示形式が理由で変えられません。 そこで表示するWebページ側で "今日以降の日付が近い順に表示される"ように処理したいと考えております。 関数定義の段階で処理した方が良いような気がするのですがどのようにしたらよろしいでしょうか?

    • ベストアンサー
    • PHP
  • 配列の日付ソート処理2

    先ほど下記のような質問をしたのですが、、、 最初の配列の添え字を取得したい場合はどのようにしたらいいのでしょうか?? ksort($up_date, "cmp"); while (list ($key, $value) = each ($up_date)) { echo "$key: $value\n"; } function cmp ($a, $b) { if ($a == $b) return 0; return ($a > $b) ? -1 : 1; } としても、日付がうまく昇順されません。 この方法では駄目なのでしょうか?? ******************************************* 配列に下記のような日付が入ってます。 $array[0]=2004-11-01 14:20:10.412761+09; $array[1]=2004-11-28 19:09:42.898169+09; $array[2]=2004-11-26 17:16:10.531744+09; $array[3]=2004-11-30 20:25:39.622259+09; これをもっとも新しい日付の順序にしたいのですが、 これはやはり、バブルソートなどを作成する必要がでてきますでしょうか??? *********************************************

    • ベストアンサー
    • PHP
  • 先頭を取り出す。

    $rss = array(); if ($list) { krsort($list); foreach ($list as $val) { $val["rss_date"] = substr($val["rss_date"], 0, 4) . "/" . substr($val["rss_date"], 5, 2) . "/" . substr($val["rss_date"], 8, 2); $rss[] = $val; } } ◆ return $rss; } 上のように配列を日付で並び替えて、一番新しいもの(先頭のもの)のみ取り出したいのですが、◆でどのような処理をすればよいでしょうか。

    • ベストアンサー
    • PHP
  • 日付から順にデータを並び替えたい

    はじめまして、勉強しながらPHPを書いています。お力添え いただけないでしょうか。 list.csvから取り出したデータを今日の日付から順に年は無視して 並べ替えたいです。 $item[3]にyymmddで数値が入っています。 $array = file('list.csv'); foreach ($array as $line) { $item = explode(',', $line); $dm=substr($item[3], 2 , 2 ) ; $dd=substr($item[3] , 4 , 2 ) ; print "$dm月$dd日?n"; } 例)7月30日 11月2日 2月6日 5月22日・・・ 現在の日付の取得とそれを元に$lineを並び替えるにはどうすれば よいのでしょうか。

    • 締切済み
    • PHP
  • 指定した日付で画像を切り替え

    タイトルどおり…。 日付で画像を切り替えしようと思っています。 それで、ソースは下記のものです。 <!--// // function fncGraphicChangerByDate() { var i; var month; var day; var today; var maxFile = 4; var date = new Date(); var graphics_data = new Array(maxFile); var graphics_path = new Array(maxFile); if ((month = (date.getMonth() + 1)) < 10) { month = "0" + month; } else { month += ""; } if ((day = date.getDate()) < 10) { day = "0" + day; } else { day += ""; } today = month + day; graphics_data[0] = "0301"; graphics_path[0] = "images/7.jpg"; graphics_data[1] = "0601"; graphics_path[1] = "images/8.jpg"; graphics_data[2] = "0901"; graphics_path[2] = "images/9.jpg"; graphics_data[3] = "1201"; graphics_path[3] = ".images/73.jpg"; for (i = 0; i < maxFile; i++) { if (graphics_data[i] > today) { if (i == 0) { i = maxFile; } break; } } i--; document.write("<IMG SRC=\"" + graphics_path[i] + "\">"); } //--> </SCRIPT> 実は、画像のサイズを指定したいのですが…。 どこに何を入れたらいいのか分かりません。 何か、イイ方法はありませんか?

  • iteratorの再利用について

    コンテナの内容を変えた後に内容を変える前のiteratorを使用することはできないと聞きました。ので、連続して何らかのコンテナ内のデータを変更しつつ、探索する場合にも、iteratorは最初から探索を始めないといけないと思っています。 例えば以下のように #include <stdio.h> #include <list> struct data { int value; data(int value) {this->value = value;} }; typedef std::list<data> DataList; typedef std::list<data>::iterator DataIterator; bool EraseValue(DataList*dataList, int value) { DataIterator iterator= dataList->begin(); while(iterator != dataList->end()) { if(iterator->value == value) { dataList->erase(iterator); return true; } iterator++; } return false; } int main() { //データを入れる DataList dataList; for(int i=0;i<10; i++) dataList.push_back(data(i)); //指定のデータを探し、消す int Value[] = {4,5,7}; EraseValue(&dataList, Value[0]); EraseValue(&dataList, Value[1]); EraseValue(&dataList, Value[2]); //結果表示 DataIterator iterator = dataList.begin(); while(iterator != dataList.end()) { printf("%d\n",iterator->value); iterator++; } return 0; } ここで、新しい値の探索を始めるたびに、最初から探索をはじめる部分が無駄であると思っています。探索するデータは、上の例のように、必ず前回探したものの後にあることはわかっているとして、これより効率のよい方法はないでしょうか?自分の中での理想は、削除したiteratorの直前に使った(削除されていない)iteratorの位置から探索を始めるのがいい思っているのですが、これはどうやらできないこと(やってはいけないこと?)の様です。 コンテナをstd::listに限定した場合でも構いません。 ご教授よろしくお願いします。

  • MySQLから取り出した値をarrayに代入したい

    下記のようなプログラムでMySQLデータベースから値を取り出してグラフを描きたいのですが、値をどのように取り出してarray()の中に代入すればよいのか分かりません。 プログラミング初心者のため要領を得ない質問で申し訳ありませんがお願いします。 <? // Here's an array containing some data to plot $test_data=array(0,0,1,2,3,3,3,1,1,0); // Here's where we call the chart, and return the encoded chart data echo "<img src=http://chart.apis.google.com/chart?chtt=".urlencode("吐き気")."&cht=lc&chs=450x125&chd=".chart_data($test_data).">"; // And here's the function function chart_data($values) { // Port of JavaScript from http://code.google.com/apis/chart/ // http://james.cridland.net/code // First, find the maximum value from the values given $maxValue = max($values); // A list of encoding characters to help later, as per Google's example $simpleEncoding = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'; $chartData = "s:"; for ($i = 0; $i < count($values); $i++) { $currentValue = $values[$i]; if ($currentValue > -1) { $chartData.=substr($simpleEncoding,61*($currentValue/$maxValue),1); } else { $chartData.='_'; } } // Return the chart data - and let the Y axis to show the maximum value return $chartData."&chxt=y&chxl=0:|0|".$maxValue; } ?>

    • 締切済み
    • PHP
  • PHPでの日付について

    PHPとPostgreSQLを利用しています。 日付を取得して、現在の日付と比べて7日以内であれば、指定の文言を表示して、7日以上であれば表示しないようにしたいです。現時点では以下のように記述しています。 $today = date(Y-m-d); if($today - $update_day <= 7) { echo "表示"; } else { echo "非表示"; } ちなみに $todayも$update_dayも形式は2005-09-18のような形です。 ご教授願います。

    • ベストアンサー
    • PHP
  • 画像処理のチェーンコード

    画像処理のチェーンコードが上手くいきません。 言語はC#です。下のようにやってますが、どこかで上手くいっていないみたいです。間違いの指摘をおねがいします。 あるいは、画像処理のチェーンコードのサンプルコードのあるサイトを教えてもらえると助かります。言語はメジャーなものならなんでもかまいません。 for (; ; ) { if (x == xs && y == ys && l != 0) { break; } switch (vec) { case 3: if (data[x, y + 1] == 0 && data[x - 1, y + 1] == 255) { x = x - 1; y = y + 1; list.Add(1); l++; } vec = 0; break; case 4: if (data[x - 1, y + 1] == 0 && data[x - 1, y] == 255) { x = x - 1; y = y + 0; list.Add(2); l++; } vec = 1; break; case 5: if (data[x - 1, y] == 0 && data[x - 1, y - 1] == 255) { x = x - 1; y = y - 1; list.Add(3); l++; } vec = 2; break; case 6: if (data[x - 1, y - 1] == 0 && data[x, y - 1] == 255) { x = x + 0; y = y - 1; list.Add(4); l++; } vec = 3; break; case 7: if (data[x, y - 1] == 0 && data[x + 1, y - 1] == 255) { x = x + 1; y = y - 1; list.Add(5); l++; } vec = 4; break; case 0: if (data[x + 1, y - 1] == 0 && data[x + 1, y] == 255) { x = x + 1; y = y + 0; list.Add(6); l++; } vec = 5; break; case 1: if (data[x + 1, y] == 0 && data[x + 1, y + 1] == 255) { x = x + 1; y = y + 1; list.Add(7); l++; } vec = 6; break; case 2: if (data[x + 1, y + 1] == 0 && data[x, y + 1] == 255) { x = x + 0; y = y + 1; list.Add(0); l++; } vec = 7; break; } }

専門家に質問してみよう