Beispiel #1
0
/**
 * 将字符串转换为时区无关的UNIX时间戳
 */
function emStrtotime($timeStr)
{
    $timezone = Option::get('timezone');
    if ($timeStr) {
        $unixPostDate = @strtotime($timeStr);
        if ($unixPostDate === false) {
            return false;
        } else {
            $serverTimeZone = phpversion() > '5.2' ? @date_default_timezone_get() : ini_get('date.timezone');
            if (empty($serverTimeZone) || $serverTimeZone == 'UTC') {
                $unixPostDate -= $timezone * 3600;
            } else {
                if (phpversion() > '5.2' && ($serverTimeZone = date_default_timezone_get())) {
                    /*
                     * 如果服务器配置默认了时区,那么PHP将会把传入的时间识别为时区当地时间
                     * 但是我们传入的时间实际是blog配置的时区的当地时间,并不是服务器时区的当地时间
                     * 因此,我们需要将strtotime得到的时间去掉/加上两个时区的时差,得到utc时间
                     */
                    $offset = getTimeZoneOffset($serverTimeZone);
                    // 首先减去/加上本地时区配置的时差
                    $unixPostDate -= $timezone * 3600;
                    // 再减去/加上服务器时区与utc的时差,得到utc时间
                    $unixPostDate -= $offset;
                }
            }
        }
        return $unixPostDate;
    } else {
        return false;
    }
}
Beispiel #2
0
function time_zones()
{
    global $conn;
    $sql = "SELECT id, time_zone\r\n\t\t    FROM users\r\n\t\t    WHERE username='******'\r\n            LIMIT 1";
    $result = $conn->query($sql);
    // Close the connection
    $conn->close();
    if ($result->num_rows == 1) {
        while ($row = $result->fetch_assoc()) {
            $id = $row["id"];
            $myTimeZone = $row["time_zone"];
        }
    }
    $timezone_identifiers = DateTimeZone::listIdentifiers();
    $options = '';
    foreach ($timezone_identifiers as $tz) {
        // Calculate time zone offset
        $offset = getTimeZoneOffset($tz);
        $offset = (substr($offset, 0, 1) == "-" ? "(GMT" : " (GMT+") . $offset . ")";
        $displayValue = htmlentities(str_replace('_', ' ', $tz) . ' ' . $offset);
        $selected = $tz == $myTimeZone ? ' selected="selected"' : null;
        $options .= '<option value="' . $tz . '"' . $selected . '>' . $displayValue . '</option>';
    }
    $json = array('options' => $options);
    echo json_encode($json);
}
Beispiel #3
0
function setTimezone()
{
    $gmt = getTimeZoneOffset();
    date_default_timezone_set($gmt);
    ini_set('date.timezone', $gmt);
    $now = new DateTime();
    $mins = $now->getOffset() / 60;
    $sgn = $mins < 0 ? -1 : 1;
    $mins = abs($mins);
    $hrs = floor($mins / 60);
    $mins -= $hrs * 60;
    $offset = sprintf('%+d:%02d', $hrs * $sgn, $mins);
    setTimeZoneOffset($offset);
}