PHPとMySQLの日付型のFORMAT2014年12月5日プログラミングDateMySQLPHPTweetこんにちは、システムエンジニアのリョータです。MySQLの記事を続けてきましたが、ちょっと趣向を変えてPHPとMySQLについて書きたいと思います。PHPとMySQLを使って開発をしているのですが、いろんな形式で日付を出したいことが多くありました。どちらにも形式を指定して出力する関数がありますが、指定するFORMATがなかなか覚えられないのです。片方だけでも使えれば、とりあえず何とかなりますが、やはり適材適所で使っていきたいですよね。そんなときにGoogle先生に聞いたり、マニュアルを見たりするのですが、どっちも載ってる酔狂なところはなかなかありません。いうことで、そんな酔狂な表を作ってみました。日付の関数おさらいということで、まずはPHPとMySQLの日付を書式化する関数から。○PHPPHPには、2つやり方があります。$yesterday);?>1つ目は、Unixのタイムスタンプ(int型)を書式化するdate関数です。32bitだと2038年問題をはらんでいたり、直感的に時間を変えられなかったり、マイクロ秒には対応していなかったり(※)しますが、日付や時刻をちょちょいと表示するには非常に便利です。※date関数でマイクロ秒の出力をしようとすると、”000000′′と出力されます。$date->format('Y-m-d');?>2つ目は、PHP5.2以上なら使用できる、DateTimeクラスのformatメソッドを使う方法です。addやsubメソッド、直感的に日付を変えられるmodifyメソッドがあります。コピーはcloneで。※DateTimeクラスはマイクロ秒に対応していますが、現在日時を生成しても取得できません。マイクロ秒はmicrotime関数で取得して設定する必要があります。○MySQLMySQLには、日付(時間)を保持するデータタイプにDATE型、DATETIME型、TIMESTAMP型、TIME型があります。(※)それぞれ使う場所によってデータタイプは変わってくると思いますが、書式の関数は全部共通です。DATETIME型とTIMEPSTAMP型は、MySQL5.6.4以降であればマイクロ秒が利用できます。※ちなみにYEAR型というものもありますが、DATE_FORMAT関数は使えないようです。日付の書式さて、本題の書式の表です。書式はPHP,MySQLそれぞれのFORMATを指定する引数に指定してください。※1その年の第1週について基準によって異なります。曜日基準の場合は、始まりの曜日が最初にきた週が第1週となります。4日基準の場合は、1月4日を含む週が第1週となります。8601で定義されている「その年の最初の木曜日を含む週が第1週」という定義と同義です。MySQLでは、WEEK関数でも通算週数が取得できます。※2第0週を使用せず前後の年のいずれかに含めます。2015年は、日曜始まり曜日基準の場合は1月4日が日曜日なので、1月1日から1月3日は2014年の第52週に含まれます。月曜始まり4日基準の場合は、2014年12月28日月曜日から2015年1月4日までが第1週となります。前後いずれの年に属するか表示するフォーマットは定義されています。※31970年1月1日0時0分0秒からの経過秒数です。MySQLではUNIX_TIMESTAMP関数で取得できます。最後にPHPとMySQL、アプリケーションとデータベースのどちらかが使えれば、なんとかなる局面はたくさんあると思います。どちらがいいというのは、そのシステムや行う処理・機能によって異なってきますからむずかしいですが、何ができて何ができないか、何が得意で何が不得意か、把握しておくのは重要かなと思います。今回はPHPとMySQLでしたが、他の言語で同じフォーマットを出力するには?と考えるのも、面白いですね。次の記事へ株式会社ライズウィル人に、企業に、社会に貢献するサービスを提供するITソリューション企業の株式会社ライズウィルです。ライズウィルブログでは、システム開発、Web制作、デザインなどのITに関するためになる情報や、社内のイベント、お知らせなどを掲載していきます。求める人材Web系、もしくはオープン系の開発実務1年以上の経験をお持ちの方。