- ベストアンサー
TIMESTAMP型(MYSQL)をstrftime()で変更したい。
こんにちは。 TIMESTAMP型のデータを受け取り、 strftimeで成形して使いたいと思っています。 しかし、 strftime('%y年%m月',$row['TIMES']) (TIMESは、TIMESTAMP型のフィールド、 $rowで読み込んでいます)。 としても、 まったく、異なる表示になってしまいます。 strftime()は、MYSQLのTIMESTAMP型を 受け付けないのでしょうか。 理由がわかりません。 何かわかる人がいましたら、 よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
がると申します。 大変に厳しい意見になり恐縮ではあるのですが。 まずはきちんとfunctionのマニュアルを読みましょう。 http://jp.php.net/manual/ja/function.strftime.php ここに書かれているとおり >> string strftime ( string $format [, int $timestamp] ) 指定した timestamp または timestamp が指定されていない場合に現在のローカル時間を用いて、 指定したフォーマット文字列に基づき文字列をフォーマットして返します。 月および曜日の名前、およびその他の言語依存の文字列は、 setlocale() で設定された現在のロケールを尊重して表示されます。 -中略- timestamp オプションのパラメータ timestamp は、 integer 型の Unix タイムスタンプです。 timestamp が指定されなかった場合のデフォルト値は、現在の時刻です。言い換えると、デフォルトは time() の返り値となります。 << とあります。 つまり、ご自身の意図はともかく。プログラムとしては「Unixタイム 20071030174402秒が渡された」と思って挙動しています。 ですので。ご自身がなさるべき事はまず「20071030174402という文字列を、適切なUnixタイムに変換する事」からになります。 http://www.php.net/manual/ja/function.strtotime.php をご覧ください。 この関数で「Unixタイム値」が取得可能です。 以上、何かの参考にでもなれば幸いです。
その他の回答 (1)
- asuncion
- ベストアンサー率33% (2127/6289)
> まったく、異なる表示になってしまいます。 $row['TIMES']の内容がどうなっているときに どんな結果を得るので「全く異なる表示」と 判断されているのでしょうか。
お礼
ありがとうございます。 $row['TIMES']を表示すると、 20071030174402 です。 $times=strftime('%y年%m月',$row['TIMES']); これで、$timesを表示しますと、 38年01月 と、なってしまいます。 お願いします。
お礼
回答ありがとうございます。 タイムスタンプには、UNIXタイムスタンプという、 秒数で管理されているものがある、とわかりました。 (これからは、タイムスタンプの相互変換を 考えようと思います)。 ただし、strtotimeでは、 20071030174402という数値そのままでは、 UNIXタイムに変換できませんでした。 MYSQLのUNIX_TIMESTAMP()が使えました。 ちょっとしたことですが、 非常に勉強になったと思います。 ありがとうございました。