joomla组件开发中的时区问题
joomla的所有组件的日期数据,都统一使用mysql的datetime,输出格式类型于2004-02-12T15:19:21
这种格式好处是在数据库中可以很直观地看到时间,但仅仅只是有这个好处,坏处却一大堆,例如不方便两个日期比较,不方便计算日期之间间隔了多久,总之一切日期运算都很不方便!joomla又是个多语言CMS系统,而datetime这种格式要表达时区概念,必须在mysql的datetime上加上offset,而mysql的datetime则始终是UTC。例如中国的时区是加8小时,那么从数据库中得到的datetime还需要加上8小时,时间才是最准确的。这种换算非常重要,而且也是很容易让人忽略的部分。
以下介绍如何准确地获取与写入时间:
<?php // 获取从数据库中得到的时间并显示 echo JHTML::_('date',$row->datetime , JText::_('DATE_FORMAT_LC2')); // 录入时间字串,到数据库中查询 $config =& JFactory::getConfig(); // 得到系统时区 $offset = $config->getValue('config.offset'); $jdate = JFactory::getDate('2001-1-2', $offset); $query .= " AND i.created >= '".$jdate->toMySQL(true)."' "; // 用当前时间进行查询 $config = &JFactory::getConfig(); $tzoffset = $config->getValue('config.offset'); $date = &JFactory::getDate($row->created, $tzoffset);