MySQLとPHPについて以下のテーブルがあるとします


テーブルuser
userid, pwd, date

上のuserテーブルのdateカラム(DATETIME型)にCURRENT_TIMESTAMPを使い日付を記録しています

このdateカラムの日付を取り出しPHPのプログラムで処理する際に1ヶ月日付を加算したいのですがどのようにしたらよいでしょうか

PHPでこの日付を加算する方法を教えてください

サンプルソースをいただけると助かります
一番参考になった回答をいただけた方に150P差し上げます

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2007/06/11 15:53:49
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答2件)

id:kn1967 No.1

回答回数2915ベストアンサー獲得回数301

ポイント300pt

(1)php側で計算する場合

$OldDate に日付が入っているとして、、、

1日単位での計算であればstrtotime関数が便利かもしれません。

$NewDate = strtotime($OldDate) + 24 * 60 * 60;

http://jp.php.net/strtotime

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...

id:jayz

ありがとうございます

解決しました

2007/06/11 15:52:47
id:Mook No.2

回答回数1314ベストアンサー獲得回数393

ポイント35pt

時間の計算はmySQL 側でクエリ時に計算してしまう方が簡単だと思います。

その場合、

SELECT DATE_FORMAT( DATE_ADD( date, INTERVAL 1 MONTH ), "%Y-%m-%d %H:%i:%S") AS afterOneMonth FROM user;

という形で afterOneMonth として、取得できます。


MySQL 日付と時間関数


もし、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 ) );
}
?>

PHP date

PHP mktime

PHP strtotime

id:jayz

ありがとうございます

サンプルソース付きで非常にわかりやすかったです

2007/06/11 15:53:06

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません