2009-06-01 21 views
1

私のデータベーステーブルには、SQLタイムスタンプを含むカラムがあります(例えば、2009-05-30 19:43:41)。私は私のPHPプログラムでUnixタイムスタンプ相当(整数)が必要です。PHPのSQLタイムスタンプからUNIXのタイムスタンプを取得する簡単な方法はありますか?

$posts = mysql_query("SELECT * FROM Posts ORDER BY Created DESC"); 
$array = mysql_fetch_array($posts); 
echo $array[Created]; 

ここで、SQLタイムスタンプをエコーし​​ます。私はUnixのタイムスタンプが必要です。これを行う簡単な方法はありますか?

答えて

12

strtotime()は喜んでSQLのタイムスタンプを取得し、UNIX時間に変換します:

echo strtotime($array['Created']); 

注あなたの配列のキーの周りに引用符を使用しないように悪い習慣であること。 According to the docs

常に文字列リテラル配列インデックスを引用符で囲みます。たとえば、$ foo ['bar']は正しいですが、$ foo [bar]は正しくありません。

これは間違っていますが、機能します。その理由は、このコードには文字列( 'bar' - 引用符があること)ではなく、未定義の定数(bar)があるからです。 PHPは、残念ながらそのようなコードでは同じ名前を持つ定数を将来定義することがあります。これは、PHPが自動的に裸の文字列(既知のシンボルに対応しない引用符で囲まれていない文字列)を裸の文字列を含む文字列に変換するために機能します。たとえば、barという名前の定数が定義されていない場合、PHPは文字列 'bar'を置き換えて使用します。

$posts = mysql_query("SELECT * 
          , UNIX_TIMESTAMP(Created) 
         FROM  Posts 
         ORDER BY Created DESC"); 

あなたは、クエリのためのPHP関数そのmysql_fetch_arrayを返す数値連想キーの両方を知っている必要があります:通常の日時フィールドが与えられ

+1

私はあなたに配列キーのコメントに対して余分な+1を与えることができたらいいと思います。 –

1

、あなたはMySQLの機能UNIX_TIMESTAMP()とクエリでこれを行うことができます結果。私は、この冗長を見つけたので、私はより多くの、より具体的かつ利用になりたい:最後

echo $array['Created']; 

ワン:

$array = mysql_fetch_array($posts, MYSQL_ASSOC); 

また、@Paolo Bergantinoが示されているとして、あなたのエコーを引用することは良い決断だろう"SELECT *" - it is worth reading discussion on the pros and cons of "SELECT *" syntaxを使用しています。

+0

mysql_fetch_arrayに2番目の引数を渡すのではなく、mysql_fetch_assocを好む –

+0

@Paolo良い点 - それを行う別の方法です。 – artlung

+0

私は間違いなくこの方法を個人的に選ぶだろう。 strtotime()はすばらしいですが、常に動作するとは限りません(一部の日付文字列はあいまいです)。一方、UNIX_TIMESTAMP()は動作することが保証されています。 –

関連する問題