Intereting Posts
Что такое PDO, как это связано с SQL-инъекцией и почему я должен использовать это? Как установить драйверы PHP PDO ODBC на CentOS 7? Устранение неполадок, преобразовывающих зависание POST из командной строки в php Использование цикла PHP для добавления строк Bootstrap и соответствующих номеров столбцов к элементам PHP DOM: получить NodeValue, исключая дочерние узлы PHP: Предотвращение захвата сеанса с помощью токена, хранящегося в файле cookie? Эффективный алгоритм генерации расписания SQL Php по ссылке как сделать эскизы с php Замените объект значением Null. Используя Form Builder в Symfony2 Публикация проверки и представления собственной формы в PHP AngularJS | Как отправить данные Json в базу данных в Codeigniter Получение полного URL-адреса текущей страницы (PHP) Можно ли сделать класс / объект для таблицы базы данных? PHP MySQLi – insert_id 0 после вставки или обновления – следует ли сначала прочитать?

Преобразование времени и даты из одного часового пояса в другой в PHP

В основном мне нужен сценарий, который, когда предоставляется время и часовой пояс, может вернуть время в другой часовой пояс.

Мои главные проблемы:

  • Где получить смещение по времени от GMT – существует ли для этого общедоступная база данных?
  • Также следует учитывать различия летнего времени (DST).
  • Как красиво обернуть все это внутри класса PHP – или есть ли такой класс уже доступный?

<?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; } 

Спасибо.