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 ); |