• ベストアンサー

MySQLのdate型をphpで○年○月○日と表示したい

MySQL5+PHP5の環境でMySQLのフィールドにdate型で2008-09-25のように本の発売日がデータが格納されています。 PHPで2008-09-25を2008年9月25日というように表示したいのですが、どのような関数を使えばいいのでしょうか。 やりたいことは、本の発売日をphpのフォームからMySQLに格納して、2008年9月25日のように自由に整形表示したいです。 また、月別のデータ表示や日付の計算なんかもしたいのですが、このような場合、MySQL側をdate型にしないで他の型にしたほうがいいのでしょうか? よろしくお願いします。

  • PHP
  • 回答数5
  • ありがとう数4

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

  • ベストアンサー
  • taaaaaaa
  • ベストアンサー率38% (31/80)
回答No.5

エンコードをETF8かEUCにするか、SJISで出力する場合、 $ddd = "2008-09-25"; $hen = strtotime("$ddd"); $dday = date("Y")."年".date("m")."月".date("d")."日"; としてやればどうでしょうか? これなら大丈夫かと。

astu2006
質問者

お礼

どうもありがとうございました。

その他の回答 (4)

回答No.4

MySQL SELECT UNIX_TIMESTAMP(date型のカラム名) FROM テーブル名; PHP echo date('Y年m月d日', MySQLから取得した値); 日付の計算については、一度TIMESTAMPに変換してから行います。

astu2006
質問者

お礼

どうもありがとうございました。

  • taaaaaaa
  • ベストアンサー率38% (31/80)
回答No.3

strtotimeとdate関数を使っても出来ますよ。 $ddd = "2008-09-25"; $hen = strtotime("$ddd"); $dday = date("Y年m月d日",$hen); MySQL側ではデータはそのままで、PHPでstrtotimeを使ってタイムスタンプに変換するといろいろな計算も出来ます。 日付の比較、1日後、1ヵ月後など。

参考URL:
http://nyx.pu1.net/function/datetime/strtotime.html
astu2006
質問者

補足

どうもありがとうございます。 教えて頂いた方法で試してみると、 2008・09月25日 このように「年」が「・」に文字化けしてしまいます。 文字化けするなら「月」「日」も化けると思うのですが、どうして年だけおかしくなってしまうのでしょうか。

  • tsaito
  • ベストアンサー率68% (17/25)
回答No.2

それで問題ないと思いますが、表示に使用する際などは、 文字コードに気をつけて、必要であればエンコードしてください。

  • tsaito
  • ベストアンサー率68% (17/25)
回答No.1

MySQLから、日付を持ってくるときに date_format関数使ってしまえばいいと思うのですが、 形式がYYYY-MM-DDから変更できないなら、 explodeで分割してくっつければいいかと。 $data = "2008-09-25"; list($year, $mon, $day) = explode("-", $data); echo $year . "年" . $mon . "月" . $day . "日";

astu2006
質問者

補足

どうもありがとうございます。 DATE_FORMATを使う場合は、DATE_FORMAT(hiduke,'%Y年%m月%d日')でselectすれば、 echo $row[hiduke]; で自動的に○年○月○日になるのでしょうか?

関連するQ&A

  • mysql,php。date型に3月上旬などをいれ

    よろしくお願いいたします。 商品のデータベースサイトを運営しております。 発売日ごとに商品を並ばせているページがあります。 過去に発売したもの、発売日が決定しているものについては、 date型に日付を入れてDBに登録しているのですが、 発売日が若干曖昧なもの、(2011年夏、や2011年4月下旬など)の商品も今後登録し、 可能ならば意味合い的に並ばせればいいなあと思っています。 こういうことは、mysqlかphpをどういじれば実現できるのでしょうか? 下記に具体的なイメージを載せます。 もしお分かりになる方がいらっしゃいましたら、よろしくお願いいたします。 テーブル title , hatsubai セブン , 2010-7-30 タイタニック , 2005-2-5 パイレーツ , 2011年4月下旬 ファイトクラブ , 2008-3-14 トロイ , 2011-9-8 ナルニア , 2011年冬 吐き出したい並び(上と一緒) タイタニック , 2005-2-5 ファイトクラブ , 2008-3-14 セブン , 2010-7-30 トロイ , 2011-9-8 パイレーツ , 2011年4月下旬 ナルニア , 2011年冬 ※自分が作っているテーブルはもうちょっと複雑なので、 新しいカラムを追加してそこにidをつけて並ばせる、というのではなく、あくまで日付で並ばせたいです。 いま吐き出しているphpは、 while ($row = mysql_fetch_array で出しています。 曖昧な表現や、ここがわからない、などあればご指摘ください。 よろしくお願いいたします。

    • ベストアンサー
    • MySQL
  • MySQLのdatetime型に0月0日を格納

    MySQLのdatetime型カラムに「月」や「日」だけ不明なデータを格納したいのですが、どうすれば良いでしょうか? ・具体的なパターンは、下記3フォーマットの何れかです ・2013-03-02 ・2013-03 ・2013 ※月日が不明なデータは全体の一部 ■案1 ・不明な日付を0に置き換え格納 ・2013-03-00 ・2013-00-00 ■案2 ・不明な日付を1に置き換え格納 ・2013-03-01 ・2013-01-01 ※本来の日付と見分けがつかなくなる ■質問 ・日付不明が後で判別できるよう、出来れば0で置き換えたい ・MySQL的に問題ないでしょうか? ・一般的に日付が不明なデータはどのように処理するのでしょうか? ■環境 ・MySQL ・PHP

    • ベストアンサー
    • MySQL
  • date型フィールドへのデータ挿入がうまくいきません。

    date型フィールドへのデータ挿入がうまくいきません。 PHP5.2.6,MySql5.0.51bを利用しています。 フィールドにdate型を指定して、phpからmysql_queryで"2010-1-1"というデータを挿入したところ"0000-00-00"として格納されていました。 phpMyAdminから「挿入」・「SQL」で"2010-1-1"を挿入したところちゃんと"2010-01-01"として格納されました。 phpから"2010-1-1"というデータを"2010-01-01"として格納するにはどうすればいいのでしょうか? 文字コードはphp・MySqlともにUTF-8を使用しています。

    • ベストアンサー
    • PHP
  • PHP+MySQLで月ごとの数量を表示したい

    MySQLに以下のような形でデータが入っています。 連番|販売日|商品名|単価|数量 1|2014/01/15|たわし|100|5 2|2014/02/10|スポンジ|50|2 3|2014/03/05|タオル|200|3 ・・・ このようなデータが大量に保存されていて、それをPHPで以下のように出力したい場合 (数量でも合計金額でも) 2013年度 商品名|4月|5月|6月|・・・12月|1月|2月|3月|合計 たわし|5|6|12|・・・7|14|21|15|210 スポンジ|・・・ どのようにデータを抽出し、どのように表示すればよいでしょうか?

    • ベストアンサー
    • PHP
  • MySQLのTIME型データをPHPで表示変更したいです。

    PHPとMySQLで、時間情報の取り扱いを試しています。 まず、MySQLにはTIME型で「10:00:00」などの時刻情報を格納しています。 それを、PHPでSELECTしてHTMLの中に表示したいのですが、 その際、2つの点でうまくいかずに困っています。 1 PHPでHTMLの中に表示するときには、「時」と「分」だけの、「10:00」の形式で表示したいのですが、方法がわかりません。 (いくつか関数を試しても、どれもTIMESTAMP型を扱うものでした) 2 例えば、「4時」のデータの場合「04:00:00」となりますが、これを「4:00」のように語頭の0を削って表示したいです。 おそらくどちらもMySQLに格納する方法を文字列型にすればいいのかとも思うのですが、SELECTの際に現在時刻との比較(現在時刻より早いか遅いかなど)を行いたいので、それができません。 何かいい方法がありましたら、教えて頂ければありがたいです。 

    • 締切済み
    • PHP
  • phpからmysqlの操作について

    phpでmysqlを操作してブラウザー上へレコードの全データをテーブル化して表示したとします。 表示されているレコードから任意のレコードを選択し削除するにはどうすればよいでしょうか。 削除のsqlは解りますが、ブラウザー上に表示されているデータを選択して内容をphpへ送信する方法がわかりません。 フィールドごとにチェックボックスを出力してvalue にフィールドの値をセットしておきsubmit ボタンでvalue値を送信するような方法でしょうか。 Visual Basic などではグッリドコントロールの何処が選択されているか取得できるので簡単ですが, php とブラウザーでそんなことができるとは思えません。 よろしくお願いいたします。 php も sql もWEB上にあります。

    • ベストアンサー
    • PHP
  • phpでMySQL内の重複文字カウント

    phpでMySQL内に格納されている文字データのうち、重複した文字データを 重複数順にランキング表示するプログラムを作成しようと思います。 例 MySQLデータが 昼 夜 昼 昼 夜 朝 であれば、 1、昼 2、夜 3、朝 とphpで表示 MySQLへのデータ登録は、普通にmysql_queryでSQL文を飛ばしてデータ挿入しています。 その際、MySQL内のデータと重複したらイベント(重複カウントを1増やすなど)を起こす方法、 もしくは、重複しているデータと、その重複数を取得できるようなphp関数、SQL文はないものでしょうか? データ数自体は100程度のものなので、全データをphpで配列に格納してから、 配列内を捜査でもよいのですが・・・ 初歩的かつ限定的な質問ですが、どうかご回答お願いします。

    • ベストアンサー
    • PHP
  • Flash→PHP→MySQLへの値の受け渡しについて

    現在、Flashのフォームで受け取った値をPHP経由でMySQLへデータを格納するシステムを作成しています。 現在、詰まっている点とは、Flashで送信したデータがMySQLまで到達できないというところです。 少し分析してみたところ、PHPを単独でブラウザにて開くと "フィールドが取得できません。" と出力されていました。 これは、 ----- <?php $setsuzoku = mysql_connect("localhost", "*****", "*****"); if (! $setsuzoku) { die ("データベースに接続できません"); } if (! mysql_select_db ("test")) { die ("データベースが取得できません"); } mysql_query("INSERT INTO rank VALUES('".$HTTP_GET_VARS['nickname']."', ".$HTTP_GET_VARS['score']); if (!$fd) { die ("フィールドが取得できません。"); } // 処理が終わったことを知らせる print('OK'); ----- というプログラムで動かしていまして、『mysql_select_db ("test")』まで動作しているのではないかと思われます。 ですので、もしかしたらFlash以前にPHPとSQLの連携がうまくいっていないような気がするのですが…どうでしょうか? Flashからの情報を送信するシステムである以上、PHPで表示すると必ずこのような形になるのでしょうか? ちなみにMySQLには、必要なDatabaseとテーブルを作成しました。 問題の切り分けは一応してみましたが、間違っているかもしれません。何かご教授頂ければ幸いです。 よろしくお願いいたします。

    • ベストアンサー
    • Flash
  • PHP+MySQLで

    PHPとMySQLにて、 データベースのテーブル[買い物]に、 「野菜」「日時」という属性を用意しておき、そこに (にんじん)(2006-10-31 09:00) (かぼちゃ)(2006-11-01 10:21) (たまねぎ)(2006-10-21 11:45) (もやし)(2006-12-22 14:00) が格納してあります。 ここから日付が、例えば、2006年の10月の行を抜き出すにはどうしたらよいのでしょうか? $y=$_GET['year'] $m=$_GET['month'] $d=$_GET['day'] として、年月日を得ます。 $y年の$m月分のデータを取得したいのですが、よく分かりません。 select * from 買い物 where 日時>$y-$m-1 and 日時<$y-$m-31 のような感じになるのでしょうか? どなたかよろしくお願いします。 MySQL4.4.4です。

    • ベストアンサー
    • PHP
  • mysql,google maps api、php

    php、mysql、google maps apiを使ったウェブサイトを作成したいと考えています。 php→mysqlの段階まではクリアできていますが、mysql→google mapのプロセスで妻づいているため、このカテゴリで質問させていただきました。 phpを使ってmysqlに緯度経度等の情報を格納し、格納された情報google mapに反映(mysql内の各情報についてmap上にマーカーを付ける)させた上で、サイト上に表示させることは可能でしょうか? phpからmysqlへ情報を格納するところまでは実際に作ってみてできたのですが、mysqlの情報が付加されたgoogle mapをサイトに表示させるところがどうしてもわかりません。 ヒントになるようなサイト等ありましたら教えていただけないでしょうか?

専門家に質問してみよう