2012-06-20 2 views
0

Можно создать дубликат:
Timezone conversion in phpпреобразование метки времени в нескольких часовых пояса

Вот простой пример того, что я хочу сделать.

У меня есть переменная $time, содержащая метку времени.

Теперь я хочу, чтобы преобразовать его в метку времени в разных часовых поясах

Есть ли способ сделать это без использования функции date_default_timezone_set() несколько раз?

Я знаю, что моя точка зрения может показаться запутанной и указать меньше, поэтому, пожалуйста, проясните любые сомнения в комментариях.

Если у меня есть, например, 100 вызовов, чтобы изменить его: -

  1. Это влияет на мои другие функции
  2. Название функции предполагает его по умолчанию
  3. Это замедляет сценарий.
+0

Какая конкретная проблема связана с вызовом этой функции? :) –

+0

Точно моя точка.Вместо того, чтобы писать здесь, вы должны были рассмотреть эту информацию в самом вопросе :) –

ответ

2

Вы можете использовать DateTime объект и установить часовой пояс в соответствии с требованиями с использованием метода SetTimezone().

Например, следующий код: -

$datetime = new DateTime(); 
var_dump($datetime->getTimezone()->getName()); 
var_dump($datetime->format(DateTime::ISO8601)); 
$datetime->setTimezone(new DateTimeZone('UTC')); 
var_dump($datetime->format(DateTime::ISO8601)); 
$datetime->setTimezone(new DateTimeZone('America/New_York')); 
var_dump($datetime->format(DateTime::ISO8601)); 

Дал мне следующий вывод: -

string 'Europe/London' (length=13) 
string '2012-06-20T20:33:29+0100' (length=24) 
string '2012-06-20T19:33:29+0000' (length=24) 
string '2012-06-20T15:33:29-0400' (length=24) 

Мой DEV сервер по умолчанию TZ является Европа/Лондон, так что вы можете получить несколько различных результатов ,

Существует список .

+0

Ха-ха. Я понимаю: P i также опубликовал это из моего андроида: P – kritya

+0

Вот некоторые примеры преобразования часовых поясов на основе DateTime - http://blog.serverdensity.com/2009/03/21/handling-timezone-conversion-with-php- Дата и время / – anjunatl

0

Чтобы дать вам образец чего-то Ive сделано для создания даты в разных часовых поясах .. Вот что я сделал

function create_date($format, $time, $offset = -6) 
{ 
    return gmdate($format, $time + (3600 * $offset)); 
} 

Если вы хотите сохранить это в формате временных меток просто изменить его чтобы выглядеть так.

function create_date($time, $offset = -6) 
{ 
    return $time + (3600 * $offset); 
} 

UPDATE:

Если вам нужно ввести в часовом поясе в текстовой форме я хотел бы использовать список из PHP Timezone List вопроса, а затем в функции сделать простой поиск в массиве, чтобы получить смещение сделайте эту работу.

ВНИМАНИЕ:

для этого, чтобы работать правильно, оригинальное время должно быть GMT время

+0

Для этого нужно ввести смещение подобно старому методу. Это означает, что я должен иметь смещение для каждого часового пояса. Когда php имеет данные для нас, я хотел бы использовать его в некотором роде :) – kritya

+0

@kritya см. Обновление. Я предполагаю, что вы хотите, чтобы вы хотели сделать что-то вроде create_date (123456789, «US/Eastern»); – bretterer

+0

Какие у вас данные? Только одна временная метка, и вы хотите получить эту же метку времени 23 в других часовых поясах? – NaturalBornCamper

Смежные вопросы