• 締切済み

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

専門家に質問してみよう