0) { $time -= date('Z'); } return $time; } /** * 将一个用户自定义时区的日期转为GMT时间戳 * * @access public * @param string $str * * @return integer */ function local_strtotime($str) { $timezone = isset($_SESSION['timezone']) ? $_SESSION['timezone'] : $GLOBALS['_CFG']['timezone']; /** * $time = mktime($hour, $minute, $second, $month, $day, $year) - date('Z') + (date('Z') - $timezone * 3600) * 先用mktime生成时间戳,再减去date('Z')转换为GMT时间,然后修正为用户自定义时间。以下是化简后结果 **/ $time = strtotime($str) - $timezone * 3600; return $time; } /** * 获得用户所在时区指定的时间戳 * * @param $timestamp integer 该时间戳必须是一个服务器本地的时间戳 * * @return array */ function local_gettime($timestamp = NULL) { $tmp = local_getdate($timestamp); return $tmp[0]; } /** * 获得用户所在时区指定的日期和时间信息 * * @param $timestamp integer 该时间戳必须是一个服务器本地的时间戳 * * @return array */ function local_getdate($timestamp = NULL) { $timezone = isset($_SESSION['timezone']) ? $_SESSION['timezone'] : $GLOBALS['_CFG']['timezone']; /* 如果时间戳为空,则获得服务器的当前时间 */ if ($timestamp === NULL) { $timestamp = time(); } $gmt = $timestamp - date('Z'); // 得到该时间的格林威治时间 $local_time = $gmt + ($timezone * 3600); // 转换为用户所在时区的时间戳 return getdate($local_time); } ?>