PHP,MySQLを使っていて、

たとえば、個人データの登録日をMySQLに入れるとき
どんな形式で入れるといいのでしょうか
20050203 とか
2005/2/3 とか
11/Jun/2002 とかいろいろあるので悩んでいます

そのデータを使って 経過日数や
他の日付データとの差を計算したりもしたいです。

他のシステムでデータを使ったりはしませんので、
互換性などは気にしていませんし、
一番良い方法じゃなければダメという訳でもありません。

どの形式で、どんな感じで日付計算とかが出来て、
こんな感じで使ってる 
ような感じのことを知りたいです。

いつも驚くほど丁寧な回答を頂きまして、
本当に有難うございます。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2006/03/30 20:52:48
  • 終了:2006/03/30 22:07:53

ベストアンサー

id:bonlife No.4

回答回数421ベストアンサー獲得回数752006/03/30 21:44:10

ポイント80pt

日付だけの項目であれば、DBにはdate型で保存するのが良いですが、時間も使うのであればDATETIMEにしてください。

他のRDBMSではdate型が時分秒まで含むケースが多いので、注意が必要です。

MySQLは型を意識せずに文字列を簡単にdate型にINSERTできます。

(Oracleなどに比べて、かなり柔軟に設計されてると思います。)

INSERT INTO sample01 (col1) VALUES ('20060101');
INSERT INTO sample01 (col1) VALUES ('2006-01-02');
INSERT INTO sample01 (col1) VALUES ('2006.01.03');

sample01というテーブルのcol1というデータ型の列に3種類の文字列で値を挿入していますが、どれもエラーになりません。

例えば、以下のように秒まで指定してINSERTしてみます。

INSERT INTO sample01 (col1) VALUES ('2006-01-04 12:34:56');

この時、col1がdate型の場合は、エラーにはならずに正常終了しますが、時分秒は全て無視されて日付部分のみが保存されます。

col1がdatetime型の場合は、秒までセットされます。

(MySQLはやっぱり柔軟です。)

日付と時刻関数のマニュアルです。

日付の計算などはこちらを参考にしていろいろと試してみたら良いと思います。

例えば、日付の比較はDATEDIFF、日付の加算はADDDATE、日付の減算はSUBDATEです。

上記のURLにサンプル付で詳しく説明されていますので、一度確認してみてください。

(よくできたマニュアルだと思います。)

マニュアルを見ながらいろいろ試してみてもさらにわからないことがあった場合、再度質問されると有識者が回答してくれると思います。

id:kaij

とても詳しく説明していただいたことを、

とても感謝しています。

質問したばかりですが

もう終了できそうです

有難うございました。

2006/03/30 22:03:11

その他の回答(4件)

id:birdie-brain No.1

birdie-brain回答回数40ベストアンサー獲得回数42006/03/30 21:19:25

ポイント20pt

MySQL 4.1 リファレンスマニュアル :: 6.2.2 日付...

日付を表す文字列をそのまま格納するのではなく、時間を必要としない日付ならdate型、時間も必要ならdatetime型で列を作成して、そこにデータを格納すればよいのでは?

日付型でデータを格納しておけば、経過日数や差分の計算も問題なく行えます。

質問にあるような様々な日付のフォーマットは、あくまでも日付を文字列で表現したときのバリエーションで、同じ日付であれば、フォーマットが違っても日付型で表現した場合の値は同じになります。

id:kaij

なるほど

MySQL側でいろいろ出来るんですね

有難うございます

2006/03/30 21:43:49
id:satokome No.2

satokome回答回数13ベストアンサー獲得回数02006/03/30 21:26:11

ポイント20pt

time()で取得できる数値でどうでしょうか?

秒単位で取得できるので比較なども容易にできると思います。

PHPのちょっとしたTIPS - 日付・時刻の表示

http://www.spencernetwork.org/memo/tips-1.php

id:kaij

書き忘れていました

日付データその物も、表示する為に使いたいのです

差分のみを考える部分で使わせていただきます。

有難うございました。

2006/03/30 21:49:37
id:iwaim No.3

iwaim回答回数215ベストアンサー獲得回数192006/03/30 21:28:28

ポイント20pt

日付なら DATE 型でいいんじゃないですかね。

http://dev.mysql.com/doc/refman/4.1/ja/datetime.html

経過日数は DATEDIFF() が使えます。

http://dev.mysql.com/doc/refman/4.1/ja/date-and-time-functio...

id:kaij

data()でどういう形式にしようと悩む事も

無かったみたいですね。

有難うございました。

2006/03/30 21:53:12
id:bonlife No.4

回答回数421ベストアンサー獲得回数752006/03/30 21:44:10ここでベストアンサー

ポイント80pt

日付だけの項目であれば、DBにはdate型で保存するのが良いですが、時間も使うのであればDATETIMEにしてください。

他のRDBMSではdate型が時分秒まで含むケースが多いので、注意が必要です。

MySQLは型を意識せずに文字列を簡単にdate型にINSERTできます。

(Oracleなどに比べて、かなり柔軟に設計されてると思います。)

INSERT INTO sample01 (col1) VALUES ('20060101');
INSERT INTO sample01 (col1) VALUES ('2006-01-02');
INSERT INTO sample01 (col1) VALUES ('2006.01.03');

sample01というテーブルのcol1というデータ型の列に3種類の文字列で値を挿入していますが、どれもエラーになりません。

例えば、以下のように秒まで指定してINSERTしてみます。

INSERT INTO sample01 (col1) VALUES ('2006-01-04 12:34:56');

この時、col1がdate型の場合は、エラーにはならずに正常終了しますが、時分秒は全て無視されて日付部分のみが保存されます。

col1がdatetime型の場合は、秒までセットされます。

(MySQLはやっぱり柔軟です。)

日付と時刻関数のマニュアルです。

日付の計算などはこちらを参考にしていろいろと試してみたら良いと思います。

例えば、日付の比較はDATEDIFF、日付の加算はADDDATE、日付の減算はSUBDATEです。

上記のURLにサンプル付で詳しく説明されていますので、一度確認してみてください。

(よくできたマニュアルだと思います。)

マニュアルを見ながらいろいろ試してみてもさらにわからないことがあった場合、再度質問されると有識者が回答してくれると思います。

id:kaij

とても詳しく説明していただいたことを、

とても感謝しています。

質問したばかりですが

もう終了できそうです

有難うございました。

2006/03/30 22:03:11
id:pxb12663 No.5

pxb12663回答回数395ベストアンサー獲得回数142006/03/30 21:58:40

ポイント20pt

http://www.javadrive.jp/mysql/datatype/index2.html

MySQLならTIMESTAMP型がいいと思います。

正確な値は"1970-01-01 12:34:56 GMT+9"といった型ですが、INSERTやUPDATEで値の挿入時には"1970-01-01"だけ挿入してもMySQL側できちんと補正してくれるなど、ある程度柔軟に使えます。

PHPで使う場合も、SELECTでTIMESTAMP型の値を取ってきた後は、substr関数で日付を例えば「1970年01月01日」と表示する事も出来ます。またstrtotime関数を使えばUNIX時間からの秒数も計算してくれるので差分を取れば他の日付データとの差も計算することが出来ます。

http://ponk.jp/php_time/index.php?page=1

id:kaij

strtotime とても便利そうです

使わせていただきます

有難うございました。

2006/03/30 22:05:54

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

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

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

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

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません