カレンダーの日表示にノードが表示されない
カレンダーモジュールを使っていると、時々入力した日付にそのノードが表示されないことがある。
週表示や月表示ではまったく問題ないのにである。
それはおそらくタイムゾーンの設定の問題で、通常日本では「日付と時刻」の設定をAsia/Tokyoとかにしているはず。そうするとクエリはこのようになる。
SELECT node.nid AS nid, node.created AS node_created, node.title AS node_title, node.type AS node_type FROM node node INNER JOIN users users ON node.uid = users.uid WHERE ((node.status <> 0) AND (users.uid = 1)) AND ((DATE_FORMAT(ADDTIME(FROM_UNIXTIME(node.created), SEC_TO_TIME(32400)), '%Y-%m-%d') <= '2009-03-20' AND DATE_FORMAT(ADDTIME(FROM_UNIXTIME(node.created), SEC_TO_TIME(32400)), '%Y-%m-%d') >= '2009-03-20'));
SEC_TO_TIMEに32400というのが入っている。これでGMT+9の9時間分を調整しているのだ。
したがって、
のようにロンドンとかのGMTが0のところに設定すると、
SELECT node.nid AS nid, node.created AS node_created, node.title AS node_title, node.type AS node_type FROM node node INNER JOIN users users ON node.uid = users.uid WHERE ((node.status <> 0) AND (users.uid = 1)) AND ((DATE_FORMAT(FROM_UNIXTIME(node.created), '%Y-%m-%d') <= '2009-03-19' AND DATE_FORMAT(FROM_UNIXTIME(node.created), '%Y-%m-%d') >= '2009-03-19'))
のようにSEC_TO_TIMEの調整がなくなり、ちゃんとクエリにひっかかるようになる。