2015-04-14 5 views
0

Мой план:PHP метки времени и настройки часового пояса

  • Получить текущую метку времени с помощью strtotime("now")
  • Преобразовать, что часовой пояс «0» - Это часть я не знаю, как это сделать. У меня есть номер, который представляет часовой пояс пользователей, например, -8 часов.
  • Хранить его в базе данных в часовом поясе «0»
  • Получить его из базы данных в часовом поясе «0»
  • Преобразование его в часовом поясе пользователей в противоположном направлении
  • использовать функцию date('', timestamp), чтобы отобразить его

Как я могу выполнить преобразование? Или я об этом ошибаюсь?

мне нужно, чтобы иметь возможность хранить в базе данных в цифровой форме, представленное время (например, StrToTime возвраты)

+0

Вы всегда можете получить время UTC с помощью gmdate ('Ymd H: i: s'); –

+0

Прохладный. Поэтому я могу хранить strtotime (gmdate ('Y-m-d H: i: s')), а затем, когда я получаю, просто добавляю количество часов, на которые пользовательский часовой пояс компенсируется? – maxhud

ответ

2

Использования time() такого же, как strtotime("now") и вам не нужно беспокоиться о преобразовании часового пояса метки времени , как временная метка не имеет часовой пояс:

Does PHP time() return a GMT/UTC Timestamp?

time возвращает метку времени UNIX, которая является независимой часовой пояс. С отметка времени UNIX обозначает секунды с 1970 UTC, вы можете сказать, что это UTC, но на самом деле нет часовой зоны.

Затем вы можете сохранить эту метку времени в своей базе данных. Когда вы его получите, вы можете преобразовать его в часовой пояс пользователей. С чем-то вроде этого:

date_default_timezone_set('UTC'); 

$timestamp = '1429066967'; 
//Supported Timezones: http://php.net/manual/en/timezones.php 
$userTimezone = 'America/Los_Angeles'; 

$dt = new DateTime(); 
// Set the timestamp 
$dt->setTimestamp($timestamp); 
// Set the timezone 
$dt->setTimezone(new DateTimeZone($userTimezone)); 
// Format the date 
$date = $dt->format('Y-m-d H:i:s'); 

echo $date; 

Выходы: 2015-04-14 20:02:47

Но если вы только имеете UTC смещение вы могли бы попробовать это:

date_default_timezone_set('UTC'); 

$timestamp = '1429066967'; 
$offset = -8; 
$userTimezone = timezone_name_from_abbr("", $offset*3600, false); 


$dt = new DateTime(); 
// Set the timestamp 
$dt->setTimestamp($timestamp); 
// Set the timezone 
$dt->setTimezone(new DateTimeZone($userTimezone)); 
// Format the date 
$date = $dt->format('Y-m-d H:i:s'); 

echo $date; 

Какие также выходы: 2015-04-14 20:02:47

+0

Отличный ответ. Благодарю. – maxhud

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