[Hack]更改article模组输出feed时时间不对的缺陷

服务时区设置为+8,在命令行行下显示正常,XOOPS中设置服务器所在时区为+0800,可article输出的feed时时间却怎么也不对,导致outlookRSS订阅中显示的文章时间也不对均为GMT+1600时区,哪有这样的时区哦,时区范围GMT-1200~GMT+1200。

修改方法如下:

1、修改htdocs\modules\article\class\feedcreator.class.php文件中739行附近FeedDate类的构造函数FeedDate如下:

   1: function FeedDate($dateString=“”) {

   2:     $tzOffset = 0;

   3:     if ($dateString==“”) $dateString = date(“r”);

   4:  

   5:     //if (is_integer($dateString)) {

   6:     if (is_numeric($dateString)) {

   7:         $this->unix = $dateString;

   8:         return;

   9:     }

  10:    //Hack By XuYong 调整日期格式

  11:     if (preg_match(“~(?:(?:Mon|Tue|Wed|Thu|Fri|Sat|Sun),\s+)?(\d{1,2})\s+([a-zA-Z]{3})\s+(\d{4})\s+(\d{2}):(\d{2}):(\d{2})\s+(.*)~”,$dateString,$matches)) {

  12:         $months = Array(“Jan”=>1,“Feb”=>2,“Mar”=>3,“Apr”=>4,“May”=>5,“Jun”=>6,“Jul”=>7,“Aug”=>8,“Sep”=>9,“Oct”=>10,“Nov”=>11,“Dec”=>12);

  13:         $this->unix = gmmktime($matches[4],$matches[5],$matches[6],$months[$matches[2]],$matches[1],$matches[3]);

  14:         if (substr($matches[7],0,1)==‘+’ OR substr($matches[7],0,1)==‘-‘) {

  15:             $tzOffset = (substr($matches[7],0,3)  60 + substr($matches[7],-2))  60;

  16:         } else {

  17:             if (strlen($matches[7])==1) {

  18:                 $oneHour = 3600;

  19:                 $ord = ord($matches[7]);

  20:                 if ($ord < ord(“M”)) {

  21:                     $tzOffset = (ord(“A”) - $ord - 1) * $oneHour;

  22:                 } elseif ($ord >= ord(“M”) AND $matches[7]!=“Z”) {

  23:                     $tzOffset = ($ord - ord(“M”)) * $oneHour;

  24:                 } elseif ($matches[7]==“Z”) {

  25:                     $tzOffset = 0;

  26:                 }

  27:             }

  28:             switch ($matches[7]) {

  29:                 case “UT”:

  30:                 case “GMT”:    $tzOffset = 0;

  31:             }

  32:         }

  33:

  34:         $tzOffset += date(“Z”,0);

  35:         $this->unix += $tzOffset;

  36:  

  37:         if (TIME_ZONE!=“”)

  38:         {

  39:             $server_TZ = abs(intval($GLOBALS[‘xoopsConfig’][‘server_TZ’] * 3600.0));

  40:             $this->unix += ($server_TZ - date(“Z”, 0)) % 43200;

  41:         }

  42:  

  43:         return;

  44:     }

  45:     if (preg_match(“~(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})(.*)~”,$dateString,$matches)) {

  46:         $this->unix = gmmktime($matches[4],$matches[5],$matches[6],$matches[2],$matches[3],$matches[1]);

  47:         if (substr($matches[7],0,1)==‘+’ OR substr($matches[7],0,1)==‘-‘) {

  48:             $tzOffset = (substr($matches[7],0,3)  60 + substr($matches[7],-2))  60;

  49:         } else {

  50:             if ($matches[7]==“Z”) {

  51:                 $tzOffset = 0;

  52:             }

  53:         }

  54:         $tzOffset += date(“Z”,0);

  55:         $this->unix += $tzOffset;

  56:  

  57:         if (TIME_ZONE!=“”)

  58:         {

  59:             $server_TZ = abs(intval($GLOBALS[‘xoopsConfig’][‘server_TZ’] * 3600.0));

  60:             $this->unix += ($server_TZ - date(“Z”, 0)) % 43200;

  61:         }

  62:         return;

  63:     }

  64:     $this->unix = 0;

  65: }

2、修改htdocs\modules\article\class\xml.php文件58行, 原来为:

$TIME_ZONE = $prefix.date(“H:i”, $server_TZ);

修改为:

$TIME_ZONE = $prefix.date(“H:i”, ($server_TZ - date(“Z”, 0)) % 43200); //Hack By XuYong 调整时区显示,防止出现+1600时区