UTC Sorunlar, onları düzeltmek için nasıl emin değil (PHP / MySQL)

2 Cevap php

Benim sunucuda benim tarih / zaman her alanda UTC tarih ve saatleri görüyorum, ben geri benim webserver UTC zaman olmak üzerinde dilimi kurulum için tüm izledi ... benim soru yerel kullanıcılara içine bu hale nasıl olduğunu tarih ve saati? Tüm Zamanlar MySQL sunucusunda UTC depolanır.

Ben kullanıcıları Şehir, Bölge (İl / Eyalet) ve ülke var. En kötü durumda ben PHP varsayılan zaman diliminde tarihleri ​​ve saatleri görüntülemek istiyorum.

Bunu nasıl yaparsınız?

2 Cevap

Bu işlevi kullandığınızda, ve adres olarak o kullanıcının yerini "Perth, WA, Avustralya" geçebileceği.

Bunun yerine başarısızlık 0 döndürmek, bu sunucu timezone ve varsayılan php timezone arasında ofset dönmek olabilir.

Eğer sayfa işler hızını artıracak olan, bir oturum değişkeni bu depolamak isteyen ve değişken boşsa, yalnızca işlevini çağırabilir.

/**
 * This function finds the geocode of any given place using the geocoding service of yahoo
 * @example getGeoCode("White House, Washington");
 * @example getGeoCode("Machu Pichu");
 * @example getGeoCode("Dhaka");
 * @example getGeoCode("Hollywood");
 *
 * @param   string address - something you could type into Yahoo Maps and get a valid result
 * @return  int timeZoneOffset - the number of seconds difference between the user's timezone and your server's timezone, 0 if it fails.
 */
function getTimeZoneOffset($address) {
    $_url = 'http://api.local.yahoo.com/MapsService/V1/geocode';
	$_url .= sprintf('?appid=%s&location=%s',"phpclasses",rawurlencode($address));
	$_result = false;
	if($_result = file_get_contents($_url)) {
		preg_match('!<Latitude>(.*)</Latitude><Longitude>(.*)</Longitude>!U', $_result, $_match);
		$lng = $_match[2];
		$lat = $_match[1];

        $url = "http://ws.geonames.org/timezone?lat={$lat}&lng={$lng}";
	    $timedata = file_get_contents($url);
	    $sxml = simplexml_load_string($timedata);
	    $timeZoneOffset = strtotime($sxml->timezone->time) - time();
	    return $timeZoneOffset;
    }
    else
    return 0;
}

Time Engine, bir LGPL php sınıftan uyarlanmış Kodu.

Eğer db gelen veriyi seçtiğinizde MySQL geçerli zaman dilimine tüm tarihleri ​​dönüştürmek için işlevi CONVERT_TZ kullanabilirsiniz. Başka stackoverflow konu anlatılır how to convert time zones using PHP 5's DateTime class.