xoopsモジュール公開後に時刻のDB管理の方法が作法とあってないことに気づいた・・・
minidiaryというxoopsモジュールを作っていて、
「時刻が16時間ずれる」という不具合を何度か
報告してもらっているのだが、やっと意味が分かった。
xoopsには
- システムの時刻
- ユーザの時刻
があって、サーバの時刻とは別に設定されている。
なので、例えばサーバが海外にあったりすると
このあたりの補正をしてやらない限り時刻がずれてしまう。
もちろんその回避の方法も用意されていて
include/functions.php
の中に、formatTimestampとかformatTimestampGMTという関数が
定義されている。
これを使うと、時刻のずれを補正したうえで
timestamp型の数値を、好きな時刻のフォーマットに変換できる。
このformatTimestampをDBからの出力時にかけてみたいと思って
minidiaryのDBを見ると、datetime型で時刻を格納してしまっている。
・・・とすると、直すには
1)DBのデータ型をdatetimeからtimestampに変更する。
⇒ すでに配布してしまっているので、運用中の人は変更がむずかしい。
2)DBから読み込んだdatetime型のデータを一度timestampに変換して、
formatTimestamp関数にかける。
⇒ いったん変換したのをまた元に戻すので、非常に無駄。
となってしまう。
後者でも一応動くけど、本当は前者の修正をしたい。
どうすればいいのかなぁ。