В основном мне нужен сценарий, который, когда предоставляется время и часовой пояс, может вернуть время в другой часовой пояс.
Мои главные проблемы:
<?php $date = new DateTime('2000-01-01', new DateTimeZone('Pacific/Nauru')); echo $date->format('Ymd H:i:sP') . "\n"; $date->setTimezone(new DateTimeZone('Pacific/Chatham')); echo $date->format('Ymd H:i:sP') . "\n"; ?>
Вышеприведенные примеры выводят:
2000-01-01 00:00:00+12:00 2000-01-01 01:45:00+13:45
найдено в Руководстве DateTime на php.net
EDIT: Как сказал Пекка: Класс DateTime существует от 5.2, и вам сначала нужно выяснить, какой из методов реально реализован и какой из них существует только от 5.3.
попробуйте это, это может помочь 🙂
function converToTz($time="",$toTz='',$fromTz='') { // timezone by php friendly values $date = new DateTime($time, new DateTimeZone($fromTz)); $date->setTimezone(new DateTimeZone($toTz)); $time= $date->format('Ymd H:i:s'); return $time; }
Здесь я использую эту функцию для преобразования даты и времени в другой часовой пояс. Для достижения наилучшего результата, если вы конвертируете свое время и время в часовую зону utc, а затем конвертируете в требуемый часовой пояс, то для него это лучший результат.
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("Ymd 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("Ymd H:i:s "); $require_timezone = $timezoneRequired; date_default_timezone_set($require_timezone); $required = date("Ymd 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("Ymd H:i:s "); return $timestamp; }
Спасибо.