• ベストアンサー

TIMESTAMP型(MYSQL)をstrftime()で変更したい。

こんにちは。 TIMESTAMP型のデータを受け取り、 strftimeで成形して使いたいと思っています。 しかし、 strftime('%y年%m月',$row['TIMES']) (TIMESは、TIMESTAMP型のフィールド、 $rowで読み込んでいます)。 としても、 まったく、異なる表示になってしまいます。 strftime()は、MYSQLのTIMESTAMP型を 受け付けないのでしょうか。 理由がわかりません。 何かわかる人がいましたら、 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • galluda
  • ベストアンサー率35% (440/1242)
回答No.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タイム値」が取得可能です。 以上、何かの参考にでもなれば幸いです。

rheda
質問者

お礼

回答ありがとうございます。 タイムスタンプには、UNIXタイムスタンプという、 秒数で管理されているものがある、とわかりました。 (これからは、タイムスタンプの相互変換を 考えようと思います)。 ただし、strtotimeでは、 20071030174402という数値そのままでは、 UNIXタイムに変換できませんでした。 MYSQLのUNIX_TIMESTAMP()が使えました。 ちょっとしたことですが、 非常に勉強になったと思います。 ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • asuncion
  • ベストアンサー率33% (2126/6288)
回答No.1

> まったく、異なる表示になってしまいます。 $row['TIMES']の内容がどうなっているときに どんな結果を得るので「全く異なる表示」と 判断されているのでしょうか。

rheda
質問者

お礼

ありがとうございます。 $row['TIMES']を表示すると、 20071030174402 です。 $times=strftime('%y年%m月',$row['TIMES']); これで、$timesを表示しますと、 38年01月 と、なってしまいます。 お願いします。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • timestampの日付の表示変換

    Mysqlのデータベースの中にある フィールド名: date_time 種別: timestamp を下記のPHPコードですると、 echo $row['date_time']; 下記のように表示されます。 2008-02-04 00:00:00 これを、Monday, February 4, 2008 と表示させたいのですが、 どのように日付表示を変換すればよいのか分かりません。 どなたか教えてもらえますか? 宜しく御願いします。

    • 締切済み
    • PHP
  • MySQLのtimestamp型について

    MySQLのtimestamp型で質問があるのですが、not nullの指定はできるのでしょうか? また、代入方法はPerlの場合、現在の日時をYYYYMMDDHHMMSS形式の文字列を簡単に作成したいのですが、どのような方法があるのでしょうか? あと、私は日付の場合はint(11)として、日付のシリアル値(1970年からの経過秒)をよく利用していました。理由は、後で足し引きなど計算しやすい為です。それで、日付型というものは使ったことがありません。 みなさんは、この日付関数利用する目的や必要性などありましたら、教えてください。

    • ベストアンサー
    • MySQL
  • MySQLのデータベースを呼んで日付表示をする点で困っています。

    MySQLのデータベースを呼んで日付表示をする点で困っています。 フィールド名:k_pvm 型:DATE データ:2009-12-21 phpでキーを元に呼び出して表示しています。表示形式は、d-m-Yで21-12-2009と表示させたいのですが、うまくできません。 echo "<tr><td>Rekisteri: </td><td><input type='hidden' name='kpv'>" . date('d-m-Y', $row['k_pvm']) . "</td></tr>"; 表示> 01-01-1970 以下、日付データ部分を変えて試してみました。 date($row['k_pvm']) > 2009-12-21 $row['k_pvm'] > 2009-12-21 date('d-m-Y') > 2009-12-22 (試した当日の日付) 試した3点については理解できますが、呼び出したデータに表示形式を指定するとどうして、01-01-1970を表示するのか解りません。直接dateで表示するのではなく、何か手順を踏まないといけないのでしょうか。

    • ベストアンサー
    • MySQL
  • intの数字をtimestampに変換したい

    php5,mysql5.1の環境です。 mysqlのフィールドにint(11)でunix timestampを挿入しています。 その11桁の数字の羅列をunixのタイムスタンプ形式に変更したいのですがどのようにすればよいのでしょうか。 うまく説明できないのですが、その11桁の数字はタイムスタンプとしてphp側で処理できないのでしょうか。 mysqlの種別カラムにおいて、int(11)とtimestampは同一のデータとして処理できないのでしょうか。

    • ベストアンサー
    • PHP
  • timestamp型の表示

    PHPとPostgreSQLでサイトを作っています。 そこで、pgSQLの中にあるtimestamp型のフィールドから PHPでデータを取り出してます。 そのまま取り出すと、「2002-09-18 23:29:00+09」こういう形になります。 このデータを「02/09/18(Wed) 23:29」みたいに表示させたいのですが。。。 PostgreSQL 7.0.2 PHP4 初歩的な質問かもしれませんが宜しくお願いします。

    • ベストアンサー
    • PHP
  • timestamp(14)のフォーマットについて

    データベースに新規データを追加した場合、timestamp(14)で、自動的に日付情報を取得しています。 (例) 20070330120003 これを、phpファイルで、「2007年3月31日」のように表示させたいのですが、phpでこのようにフォーマットさせる関数はあるのでしょうか? 現在は、SQL側で、 $sql = "SELECT *, concat(YEAR(timestamp),'年',MONTH(timestamp),'月',DAYOFMONTH(timestamp),'日') as time_format ・・・ とさせています。 以上、宜しくお願い致します。 VERSION: php4

    • ベストアンサー
    • PHP
  • timestamp with time zone型のデータから日付と時間と取り出したい。

    PHP 4.4.2 + PostgreSQL 7.4.8 です。 今、フィールド「DATE」、データ型「timestamp with time zone」に  2006-12-14 09:00:28.853324+09  というデータが入っています。 このデータをウェブ上で ○月○日○時○分 という形式で表示させたいのですが、どのようにすればよいでしょうか? よろしくお願いします。

  • 配列で指定した値のみをMySQLからループで呼び出す方法

    MySQLから呼び出す際の下記のような書式を簡略化したいと思っています。 $test = $row['test']; アドバイスのほどよろしくお願いいたします。 /* 以下ソース */ $field =array('a','b','c','d','e','f'); function ROW_DATA(){ grobal $field; foreach($field as $key => $val){ return $key = $row['$key']; } } $sql = "SELECT * FROM data"; $rs = mysql_query($sql); while($row = mysql_fetch_array($rs)) { ROW_DATA(); }

    • ベストアンサー
    • PHP
  • MySQLのTimestamp(14)型のフィールドにYYYY/MM/DD hh:mm形式のデータをインサートするには

    MySQLのTimestamp(14)型のフィールドに YYYY/MM/DD hh:mm形式のデータをインサートするには どのようにしたらよいのでしょうか? MySQL の Timestamp(14)型(YYYY-MM-DD hh:mm:ss)のフィールドに YYYY/MM/DD hh:mm 形式のデータ(ssに該当するデータがない)を インサートするには、 PHPでどのようにしたらよいのでしょうか? できれば、インサートの際にssに自動的に00をつけたいです。 現在、PHPでinsert文を実行すると、データの桁数が足りないため、 フィールドの値は、0000-00-00 00:00:00になってしまいます。 同じ形式(YYYY/MM/DD hh:mm)のデータをphpMyAdminで インポートすると、自動的にssに00がつき、 YYYY-MM-DD hh:mm:ss(例 2009-10-20 12:10:00) となってくれます。 PHPでもphpMyAdminと同じ処理をしたいのですが、 インターネットで検索してもやり方が見つからず、 どのようにしたらよいのか、わかりません。。。 インサートするデータサイズが83MBと大きいので、 PHPで処理したいと思っています。 (phpMyAdminは8MBまでなので) ご存知の方がいましたら、教えていただけると、 助かります。m(_ _)m レンタルサーバー:さくら インサートするファイル:CSVファイル PHP 5.2.x MySQL 5.1 phpMyAdmin 3.1.3.1

    • ベストアンサー
    • MySQL
  • 取り出した日付の表示

    phpにてDBに格納されている日付データを取り出した際にデフォルトで "2007-06-04"のように表示されてしまいますが、これを "07/06/04"や"07.06.04"のように表示するにはどうすればよいのでしょうか? MySQLのフィールドタイプはdateに設定しています。 print date(Y/m/d,"$row["日付フィールド"]");とやるとなぜか、 "1970/01/01"と表示されてしまいます。 普通に、print $row["日付フィールド"]");とやると 2007-06-04と出てしまいます。 どうぞ宜しくお願いします。

    • ベストアンサー
    • PHP