テーブルuser
userid, pwd, date
上のuserテーブルのdateカラム(DATETIME型)にCURRENT_TIMESTAMPを使い日付を記録しています
このdateカラムの日付を取り出しPHPのプログラムで処理する際に1ヶ月日付を加算したいのですがどのようにしたらよいでしょうか
PHPでこの日付を加算する方法を教えてください
サンプルソースをいただけると助かります
一番参考になった回答をいただけた方に150P差し上げます
(1)php側で計算する場合
$OldDate に日付が入っているとして、、、
1日単位での計算であればstrtotime関数が便利かもしれません。
$NewDate = strtotime($OldDate) + 24 * 60 * 60;
1ヶ月という話になると大の月や小の月、うるう年などが大変なので
mktime関数がよろしいでしょう。
$y = date('Y',$OldDate);
$m = date('n',$OldDate) + 1;
$d = date('j',$OldDate);
$h = date('G',$OldDate);
$m = date('i',$OldDate);
$s = date('s',$OldDate);
$NewDate = mktime($h,$m,$s,$m,$d,$y);
http://jp.php.net/manual/ja/function.date.php
http://jp.php.net/manual/ja/function.mktime.php
(2)MySQL側で計算させる場合
DATE_ADDという関数がありますのでMySQL側で計算させたほうが楽かもしれません。
SELECT (DATE_ADD(フィールド名,INTERVAL 1 MONTH)) AS 新しいフィールド名 FROM テーブル名
http://dev.mysql.com/doc/refman/4.1/ja/date-and-time-functions.h...
時間の計算はmySQL 側でクエリ時に計算してしまう方が簡単だと思います。
その場合、
SELECT DATE_FORMAT( DATE_ADD( date, INTERVAL 1 MONTH ), "%Y-%m-%d %H:%i:%S") AS afterOneMonth FROM user;
という形で afterOneMonth として、取得できます。
もし、PHP で処理したい場合は、
SELECT DATE_FORMAT( date, "%Y-%m-%d %H:%i:%S") AS strDate FROM user;
としてデータを取得した後、下記のような関数で計算することになるかと思います。
(下記サンプルでは暫定的に文字列を渡してしています。)
<? print addOneMonth( "2007-06-10 11:23:46" )."<br>\n"; print addOneMonth( "2007-12-10 11:23:46" )."<br>\n"; // 一ヶ月を加算する関数 function addOneMonth( $mySQLDate ) { // PHP の時間(UNIX Time)に変換 $phpTime = strtotime( $mySQLDate ); // 1ヶ月を加算 $stamp = mktime( date( "h", $phpTime ), date( "i", $phpTime ), date( "s", $phpTime ) , date( "n", $phpTime ) + 1, date( "j", $phpTime ), date( "Y", $phpTime ) ); // YYYY-MM-DD HH:MM:SS 書式で返す return sprintf("%04d-%02d-%02d %02d:%02d:%02d\n", date( "Y", $stamp ), date( "n", $stamp ), date( "j", $stamp ), date( "h", $stamp ), date( "i", $stamp ), date( "s", $stamp ) ); } ?>
ありがとうございます
サンプルソース付きで非常にわかりやすかったです
ありがとうございます
解決しました