人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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

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

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

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

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

●質問者: kaij
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:JUN MySQL PHP うご システム
○ 状態 :終了
└ 回答数 : 5/5件

▽最新の回答へ

1 ● birdie-brain
●20ポイント

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

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

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

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

◎質問者からの返答

なるほど

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

有難うございます


2 ● satokome
●20ポイント

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

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

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

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

◎質問者からの返答

書き忘れていました

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

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

有難うございました。


3 ● iwaim
●20ポイント

日付なら 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...

◎質問者からの返答

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

無かったみたいですね。

有難うございました。


4 ●
●80ポイント ベストアンサー

日付だけの項目であれば、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にサンプル付で詳しく説明されていますので、一度確認してみてください。

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

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

◎質問者からの返答

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

とても感謝しています。

質問したばかりですが

もう終了できそうです

有難うございました。


5 ● pxb12663
●20ポイント

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

◎質問者からの返答

strtotime とても便利そうです

使わせていただきます

有難うございました。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ