• 締切済み

MYSQLの日付から現在までの年数を表示するには?

MYSQLとPHPを使っています。 MYSQLに作成日というDATA型のデータがあります。 そのデータから現在までの年数を表示したいのですがどのようにしたらできますか。 作成日:2010-8-09 現在:2012-10-26 年数:2年

みんなの回答

回答No.5

俺だったら他の回答者と違ってMySQLを使っているならPHP側で処理させずにMySQL側の関数で処理するね。 単純に年だけで見て算数するなら select (YEAR(NEW()) - YEAR(作成日)) as 年数 ~ しっかりと日付も考慮して計算するなら(ただし閏年の計算は省くので一年365日として計算する) select TRUNCATE((TO_DAYS(NEWS() - TO_DAYS(作成日)) / 365,0) as 年数 ~ こんな感じかな。テストしてないので自分で確認してくれ。

全文を見る
すると、全ての回答が全文表示されます。
  • ponta1971
  • ベストアンサー率30% (361/1191)
回答No.4

作成日が文字列なのかなと言うことで、こんな感じでどうでしょう。 --------------------------------------------------------------------- $date1 = '2010-8-09'; //作成日:1 $date2 = '2012-10-26'; //現在:2 list($Y1,$M1,$D1) = sscanf($date1,'%d-%d-%d'); //作成日を年、月、日に分割:3 list($Y2,$M2,$D2) = sscanf($date2,'%d-%d-%d'); //現在を年、月、日に分割:4 $a = JDToUnix(gregorianToJD($M1,$D1,$Y1)); //作成日のUNIXタイムを求める:5 $b = JDToUnix(gregorianToJD($M2,$D2,$Y2)); //現在のUNIXタイムを求める:6 $c = $b-$a; //現在と作成日の差を求める:7 $y = floor($c/(60*60*24*365)); //1年間の秒数で割り小数点以下切捨て:8 --------------------------------------------------------------------- 2の現在の日付は文字列としてますが、date関数とかで年月日をとりだして4に当てはめてください。 8で1年間を365日にしてますが、うるう年が含まれていても特に問題ないと思います。

全文を見る
すると、全ての回答が全文表示されます。
  • shimix
  • ベストアンサー率54% (865/1590)
回答No.3

MySQLから取り出すときにdate_formatを通して、yyyymmddの形式で取り出すと楽です。現在日付もdate('Ymd')で取得しておけば、各々のintvalの差を10000で割る(端数切り捨て)で求められます。 #元日付が2/29だと、2/28では1年に満たないのは上手く工夫するしかないです(汗 (例) date型のカラム xxxdate を、$row['date_xxx'] に date_format('%Y%m%d', xxxdate) として取得したとして、 $now = date('Ymd'); $ydiff = floor((intval($now) - intval($row['date_xxx'])) / 10000);

全文を見る
すると、全ての回答が全文表示されます。
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

経過年というのは意外にめんどう (1)作成日の月が現在の月より大きければ年の差-1 (2)同、小さければ年の差 (3)作成日の月と現在の月が同じの場合、日付が大きければ年の差-1 (4)同、日付が小さければ年の差 (5)同、日付が同じ場合はどうするかきめる くらいの場合分けが必要です 例外的なうるう年の2/29から翌年の3/1はどうするのかとか仕様がむずかしい

全文を見る
すると、全ての回答が全文表示されます。
回答No.1

DATE型……ですかね? とりあえずさっくり作ってみました(未検証) /************************************ @param baseDate : 基準の日付 @param baseDate : 比較対象の日付 return 差分の年数を返却 ************************************/ function calcDate($baseDate, $futureDate){ //区切り文字を指定し配列と化す $arrDate1 = explode("-", $baseDate); //ベースの日付 $arrDate2 = explode("-", $futureDate); //比較対象 //指定した日時のUNIXタイムスタンプを取得する $cd = mktime(0, 0, 0, $arrDate1[1], $arrDate1[2], $arrDate1[0]);//正規化 $fd = mktime(0, 0, 0, $arrDate2[1], $arrDate2[2], $arrDate2[0]);//正規化 if($cd > $fd){ $diff = $cd - $fd; }else{ $diff = $fd - $cd; } return date("Y年", $dt); } ただし注意としては explodeはあくまで区切り文字を指定して配列化するだけなので タイムスタンプを対象にすると日付が狂います 例:yyyy-mm-dd hh:mm:ss arr[0]:yyyy arr[1]:mm arr[2]:dd hh:mm:ss この場合日付に日付以外の時間などが入ります

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • MySQLの日付データについて

    PHPでMySQLから日付データを表示しようとしているのですが、日付フィールドの値をvarcharにしてしまいました。 このような状況下での質問なのですが、varcharフィールドに2006年1月1日と2006年2月1日と2006年11月1日がある場合、PHPで日付データを表示するとこのような順番で表示されてしまいます。 2006年1月1日 2006年11月1日 2006年2月1日 下記のようなカレンダー順の表示にするにはどのような方法があるでしょうか? 2006年1月1日 2006年2月1日 2006年11月1日 また、下記の質問と回答を拝見したのですが、日付データはタイムスタンプで処理するのが一般的なのでしょうか? http://oshiete1.goo.ne.jp/qa1396724.html その場合、フィールドタイプをDATEにしておいて、PHPからMySQLに書き込む際はどのような形式が正しいのでしょうか? 2006/1/1のまま書き込んでも自動的にタイムスタンプに変換してくれるのでしょうか。 最後に私のような初心者がMySQLを勉強する際にお勧めの書籍やウェブサイトなどありましたら是非教えて頂けると幸いです。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • MySQLのdate型をphpで○年○月○日と表示したい

    MySQL5+PHP5の環境でMySQLのフィールドにdate型で2008-09-25のように本の発売日がデータが格納されています。 PHPで2008-09-25を2008年9月25日というように表示したいのですが、どのような関数を使えばいいのでしょうか。 やりたいことは、本の発売日をphpのフォームからMySQLに格納して、2008年9月25日のように自由に整形表示したいです。 また、月別のデータ表示や日付の計算なんかもしたいのですが、このような場合、MySQL側をdate型にしないで他の型にしたほうがいいのでしょうか? よろしくお願いします。

    • ベストアンサー
    • PHP
  • mysqlとphpでのデータ表示について

    この度、 mysqlとphpで野球チームのデータ管理サイトを作成しようと思っています。(javascriptも使用予定) お恥ずかしいですが当方の知識としてはmysql+phpの入門書を2週間読んだ段階です。 そこで質問です。 ---------------------------------------------- 例えば、打率を表示したい場合、 計算式は 安打数/打数 ですが、 mysqlで、a(打数)、b(安打数)、c(打率) というカラムがあった場合、 cには (1)mysql上で計算値をinsertするのでしょうか? (2)それともphpスクリプトで計算値をHTMLに吐き出すのでしょうか? ご教授願います。 できれば簡単でいいので手法を教えていただけたらと思います。

    • ベストアンサー
    • MySQL
  • Mysqlで日本語がどうしても非表示になります

    xampp for windows 1.7.0 apache 2.2.11 mysql 5.1.30 php 5.2.8 をインストールしました。 OSはwindowsXPです。 phpの基礎勉強を終え、MySQLでデータベースの作成の学習の途中なのですが、コマンドラインからデータベースを作成しselect*文でテーブル表示すると、日本語のデータがどうしても文字化けしてしまいました。 いろいろネット検索して試行錯誤した結果、status文で呼び出すと表示される各characterset(Server,DB,Client,Conn)ともにutf8にようやく統一できたようですが、文字化けこそしなくなったものの、今度は非表示(空白)になってしまいます。一応phpmyadminでもそのデータを表示させてみたのですがやはり非表示です。 一日やってどうにもならず、どなたかのお力をお借りしたいと思います。なにとぞご回答よろしくお願いいたします。

  • PHP+MySQLで、MySQLデータをブラウザで表示→ブラウザからデ

    PHP+MySQLで、MySQLデータをブラウザで表示→ブラウザからデータをアップデート→ブラウザを更新して再表示したいのですが、データをアップデートしたあと、ブラウザで表示してもすぐに反映されません。 「あれ?」と思ってmysqladminでDBを見ると、アップデートはされています。そしてしばらくして再度ブラウザを更新すると、アップデートが反映された状態で表示されます。 すぐにアップデートを反映させたいのですが、どうすればよいでしょうか。 phpで、update処理の後、 mysql_close($conn); と書いていますが、これだけではいけないのでしょうか。 よろしくお願い致します。

    • ベストアンサー
    • MySQL
  • MySQLのビット演算

    いつもお世話になっております。 PHPとMySQLでアプリケーションの作成をしています。 MySQLでのビット計算で検索結果を表示しようとしています。 ■PHPファイルにはチェックボックスで、約70個の項目が表示されています。 ■データベースには「0」と「1」で以下のように登録されています。  00011・・・・・1110 ■チェックされた場合は「1」、チェックされていない場合は「0」  PHPファイルからsubmitされたときに、↑の条件でデータを生成します。 ■一致したものが1つでもあれば検索結果に表示します。  00011・・・・・1110(データベースのデータ) &00010・・・・・0000(submitされたデータ) ------------------------  00010・・・・・0000 上記のようにしたい場合、SQL文はどのように記述したらよろしいでしょうか。 ご教示よろしくお願いいたします。 <環境> MySQL:4.1.20 PHP:4.3.9

    • ベストアンサー
    • MySQL
  • PHPとMySQLについて

    PHPとMySQLについて PHP、MySQLともに初心者の者です。 ネットの情報を参考に以下のようなプログラムを作成しました。 <?php //ファイルを読み込み require_once("DB47.php"); // クエリを送信する $sql = "SELECT * FROM japanDB ORDER BY PREF_CD"; $result = executeQuery($sql); //結果セットの行数を取得する $rows = mysql_num_rows($result); //表示するデータを作成 if($rows){ while($row = mysql_fetch_array($result)) { $tempHtml .= "".$row["PREF_CD"]." ".$row["PREF_NAME"]." "; $tempHtml .= "\n"; } $msg = $rows."件のデータがあります。\n\n"; }else{ $msg = "データがありません。\n\n"; } //結果保持用メモリを開放する mysql_free_result($result); ?> <?= $msg ?> <?= $tempHtml ?> これはデータベースに 1、北海道 2、青森 ・  ・ ・  ・ ・  ・ 47、沖縄 といった情報を与えており、PHP側でMySQLに接続し、その内容をコマンドプロンプト上で表示するといったものです。 しかし、PHPプログラムを実行してしまうと、全データが一気に表示されてしまうので、見づらいものとなっています。 そこで、地名や番号を入力すれば、地名を表示するような検索機能を付けたいのですが、PHPからMySQLデータベース内を検索する方法が分かりません。検索機能をこのプログラムに組み込みたいのですが・・・。 どなたかご教授お願いいたします。 ***環境*** OS : Windows XP Pro PHP4.2.3 、MySQLインストール済み **********

    • ベストアンサー
    • PHP
  • PHPでMySQLのデータを表示したい

    /* どなたか以下のエラーの原因をご教授ください。よろしくお願いいたします。 金額の多い人順にデータを並べ替えて上位3人を順番に表示するプログラムです*/ <?php mysql_connect("localhost","user","password"); mysql_selectdb("rensyu"); $result = mysql_query("SELECT * FROM uriage ORDER BY kingaku DESCLIMIT 3"); $uriageStr = ""; $count = 1; while(!$data = mysql_fetch_array($result)) { $uriageStr = $uriageStr."namae".$count."=".$data[0]."&kingaku".$count."=".$data[0]."&"; } $uriageStr = substring($uriage,0,length($uriage)-1); print($uriageStr); ?> /* MySQLにはrensyuデータベースを作成、それにuriageテーブルを作成、フィールドとしてnamaeとkingakuを作成、 namaeにakiko,bunta,coco,daisuke,eikoを入力、それぞれにkingakuとして1,2,3,4,5を入力している。 この場合http://localhost/get_uriage.phpと入力した場合次のような結果が表示されるはずです。 namae1=eiko&kingaku1=5&namae2=daisuke&kingaku2=4&namae3=coco&kingaku3=3 しかし、表示結果は Parse error:parse error,unexpected T_STRING in C:\www\get_uriage.php on line 9 でした。 TeraPadの行表示でで9行目は $count = 1;です。(コメントは除く) */

    • 締切済み
    • PHP
  • GooglemapAPIで現在地をMysqlへ登録

    こちらでよろしかったがどうか分かりませんが、外しておりましたらすみません。 GoogleMaps API v3で、watchPositionを使い、iPhoneで現在地を取得する スクリプトを試しています。 一定間隔で現在地を測位し、iphone上に緯度経度は表示されていますので、 これをMySQLデータベースに登録していき、ロガーのような事をしたいと思っています。 DBへ登録するPHPスクリプトは作成済みで、例えば 『sample.php?lat=00.0000&lng=000.00000』と アクセスするとDBへは登録されますが、Javascriptからこちらへのデータをどう渡して良いのかが 分かりません。 どなたかお詳しい方、ご教授宜しくお願い致します。

  • mysql内のデータを表示させたい

    mysql内にデータが入っており、その中の何日~何日までを表示させたいのですが、なかなかできず悩んでおります。 | hiduke | contents | | 2009-01-01 | テスト1 | | 2010-01-01 | テスト2 | | 2010-12-31 | テスト3 | | 2011-11-01 | テスト4 | となっているとき2010年のものだけを表示させたい場合はどのように記述したらよろしいでしょうか? わかる方がいらっしゃいましたら教えていただけないでしょうか。

    • ベストアンサー
    • PHP
EDC -GUC3Lがつながりません
このQ&Aのポイント
  • 有線LANアダプターのEDCーGLC3LはMAC OS11.1にはつながりませんか。
  • 解決策があれば、教えてください。
回答を見る