Burada datetime'ı başka bir saat dilimine dönüştürmek için bu işlevi kullanıyorum. En iyi sonuç için, datetime saatinizi utc saat dilimine dönüştürüp gerekli zaman dilimini dönüştürürseniz daha iyi sonuç alınır.
function ConvertTimezoneToAnotherTimezone($time, $currentTimezone, $timezoneRequired) {
$dayLightFlag = false;
$dayLgtSecCurrent = $dayLgtSecReq = 0;
$system_timezone = date_default_timezone_get();
$local_timezone = $currentTimezone;
date_default_timezone_set($local_timezone);
$local = date("Y-m-d H:i:s");
/* Uncomment if daylight is required */
// $daylight_flag = date("I", strtotime($time));
// if ($daylight_flag == 1) {
// $dayLightFlag = true;
// $dayLgtSecCurrent = -3600;
// }
date_default_timezone_set("GMT");
$gmt = date("Y-m-d H:i:s ");
$require_timezone = $timezoneRequired;
date_default_timezone_set($require_timezone);
$required = date("Y-m-d H:i:s ");
/* Uncomment if daylight is required */
// $daylight_flag = date("I", strtotime($time));
// if ($daylight_flag == 1) {
// $dayLightFlag = true;
// $dayLgtSecReq = +3600;
// }
date_default_timezone_set($system_timezone);
$diff1 = (strtotime($gmt) - strtotime($local));
$diff2 = (strtotime($required) - strtotime($gmt));
$date = new DateTime($time);
$date->modify("+$diff1 seconds");
$date->modify("+$diff2 seconds");
if ($dayLightFlag) {
$final_diff = $dayLgtSecCurrent + $dayLgtSecReq;
$date->modify("$final_diff seconds");
}
$timestamp = $date->format("Y-m-d H:i:s ");
return $timestamp;
}
Teşekkür ederiz.
mayın silme, yumruk bana yendi yardımcı olabilecek bu deneyin. DateTime'ın PHP 5.2'den beri mevcut olduğunu belirtmekte fayda var - 5.1 için bir yama var ama deneysel –
Yep. datetime güzel "yeni" dir. 5.2'de bile, – ITroubs
numaralı cevabın gerektirdiği, istenen ve bahsedilen tüm fonksiyonları içermez. Bu fonksiyonlar otomatik olarak gün ışığından yararlanma işlemlerini de gerçekleştirir, burada sadece bir ofset eklenmesi aksak ve yanlıştır. –