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関数にかける。
⇒ いったん変換したのをまた元に戻すので、非常に無駄。


となってしまう。
後者でも一応動くけど、本当は前者の修正をしたい。
どうすればいいのかなぁ。