Tuesday, April 14, 2020

Convert user time to UTC time


/**
 * Convert user's local time to UTC time
 */
function dateTime_local_to_utc($time, $timezone, $abbr = false) {
    //target time zone
    if ($abbr) {
        $t = timeStandardToTimeZone($timezone);
        $timezone = $t['timezone_id'];
    }

    $userTimezone = new DateTimeZone($timezone);
    $userTime = new DateTime('now', $userTimezone);

    // time in seconds, based on UTC
    $offset = $userTime->getOffset();

    // get server timeZone first
    $server_timezone = date_default_timezone_get();
    // set server timeZone provided via user
    date_default_timezone_set($timezone);

    // get UTC time
    $time = date('Y-m-d H:i:s', strtotime($time) - $offset);

    // now set server timeZone default
    date_default_timezone_set($server_timezone);
    return $time;
}

if (!function_exists('timeStandardToTimeZone')) {
    function timeStandardToTimeZone($ts)
    {
        $timezone_abbreviations = DateTimeZone::listAbbreviations();
        if (!empty($timezone_abbreviations[strtolower($ts)])) {
            return $timezone_abbreviations[strtolower($ts)][0];
        }

        return $ts;
    }
}


No comments:

Post a Comment