2010-12-07 15 views
2

よろしくお願いします。私はいくつかのtime()をデータベースに保存しなければならないプロジェクトに取り組んでいます。私が2倍と他のクールなものの間で操作を行うことができるように、より良い柔軟性のために私はタイムスタンプとしてそれを保存すべきであると私に思えます。 しかし、私は多くの人が日付形式のデータベースに時間を保存していることをよく知っています。たとえば、タイムスタンプの日付形式をどのように変換できますか?どうやって日付を別の日付に差し引くことができますか?時間の保管方法

タイムスタンプを使用して間違っていて、後で(ユーザーに表示するために)タイムフォーマットに変換しますか? Mysqlデータベース。 、MySQLは、DATESUBをいくつかの日付関数をサポートしてちょうどあなたが知らなかった場合には

+0

どのデータベースをお使いですか? – Gordon

+0

これはDBですか? :-)ゴードンは速かった! – acm

+0

http://snippets.dzone.com/posts/show/1455 –

答えて

1

。 SQLのORDER構文を使用する場合は、順序が正しくないため、varcharまたはcharの代わりにintを使用することをお勧めします。

日付からタイムスタンプに変換するとしていることに応じて、strtotimeまたはmktimeのいずれかを使用できます。

2つのタイムスタンプの違いを計算するには、それらを互いに引き算するだけです。

タイムゾーンの問題については、これをdate_default_timezone_setを使用してユーザーの国に設定できます。これは、あなたがdate

+1

データベースには[y2k38問題](http://en.wikipedia.org/wiki/Year_2038_problem)の影響を受けていないネイティブデータ型がありますが、タイムスタンプを保存するのは(32ビットなので)... – ircmaxell

+0

ほとんどのWebアプリケーション何年にもわたって作られています。おそらく最大5年です。 2038年を過ぎてもタイムスタンプを使用する必要があるアプリケーションはほんの一握りです。私はむしろ、完全に将来的な証明ではなく、効率的にアプリケーションを設計したいと考えています。 – RichW

+2

これはy2kの問題に私たちを惹きつけた考え方です。私はy2k38についての心配は今や愚かであることに同意しますが、解決策は存在し、それはあなたの提案よりも効率的です(実際には、日付演算がコンパイルされたCで行われているので、はるかに効率的です)。したがって、ネイティブのデータ型を使用するのは本当の理由ではありません。 – ircmaxell

1

、DATEADDなど

UNIXタイムスタンプは、常に10文字になるように、私は、int型(10)の形式でタイムスタンプを格納する傾向がある
+0

私はこの答えの要点を得ていませんでした。 – Shoe

+1

重要な点は、SQL Date/DateTimeデータ型で多くの日付演算(タイムゾーン、日付バリア、閏年など)を行うことができることです。あなたの 'WHERE'節で(タイムスタンプで同じものを達成するために) – svens

関連する問題