MySQLの日付(DATE)をHTML5の入力属性「week」に変換する時は「YEARWEEK」を使うべし


2017年1月12日

HTML5の<input type=”week”>をMySQLのDATE型から表現する


どうも、僕です。

先日初めてMySQLデータベースの日付型をHTMLのweekに変換したいなんて需要が生まれました。
調べてみるとMySQLには「WEEK」と「YEARWEEK」という2種類の関数が有りました。
(ちなみに「MariaDB 10.1.x」と「MySQL 5.6.x」にて検証しています)

MySQLリファレンス

WEEK
YEARWEEK

うーん、急いでいる時に見るとやる気が失せますね。

腰を据えて調べる


Xmasも過ぎた年末で気持ちに余裕があったのでじっくり挑みました。

HTMLのweekだと「2016年第1週」は「2016/01/04(月)~2016/01/10(日)」となっており、
サーバ送信後は「2016-W01」としてデータが飛んでいます。(PHP5.6とChrome55.0.xの組み合わせで確認)

そこでポイントはネックとなる跨ぎ日の2016/01/01(金)です。
答えから言うと「2015年第53週」で「2015/12/28(月)~2016/01/03(日)」となっており、
サーバ送信後は「2015-W53」としてデータが飛びます。

つまりMySQLでこの挙動をする関数と引数を選択すればいいわけです。

で出した選択は「YEARWEEK」の引数「3」です。

このままだと「201553」という結果が返ってしまうので、ちょっと加工します。



これはもうちょっと良い書き方があるかもですが、とにかく「2015-W53」が返ります。

調べても意外と乗ってなかったのでニッチなのでしょうが、テクってみたい時にお試しあれ。


ちなみにそれぞれの結果はこんな感じです。