2013-10-20 4 views
1

Мне немного любопытно, как я могу хранить и получать доступ к «точкам времени» для разных вещей при приобретении часового пояса пользователя. Было бы здорово использовать time(); в качестве данных хранилища/базы данных.PHP Время/Дата Часовой пояс Специфические вещи

Например, если я сделаю обновление для блога, он будет показывать штамп как-то вроде 26/01/2000 11:34, но если часовой пояс пользователя был на час раньше моего, то он выглядел бы как 26/01/2000 12:34, конечно же определяемый их настройками. Это также было бы полезно для таких вещей, как обратный отсчет для ограниченных по времени функций. Однако я не знаю, как отформатировать unix-timestamp таким образом. Руководство и помощь были бы замечательными :).

ответ

2

Всем вашего почтового времени и время сервера должна быть UTC, чтобы начать. Получить свой пост время из БД и использовать DateTime и DateTimeZone классы в некотором роде подобные ниже

$fromDatabase = '2008-08-03 14:52:10'; 
$datetime = new DateTime($fromDatabase); 
$timezone = new DateTimeZone('America/Los_Angeles'); 
$datetime->setTimeZone($timezone); 
echo $datetime->format('Y-m-d H:i:s'); 

В качестве альтернативы на Linux при использовании MySQL можно загрузить таблицы часовой пояс и настроить время даты возвращенное в запросе MySQL , См. Эту страницу, как начать с этого - http://dev.mysql.com/doc/refman/5.5/en/time-zone-support.html

1

Пожалуйста, прочитайте страницу руководства по дате:

PHP Manual: Date

Я считаю, что этот код будет делать то, что вы спросили:

$time = time(); 
$today = date("m j, Y, G:i a"); 
echo $today; 

Для изменения часовых поясов, добавить или вычесть один час. Поскольку временные метки unix находятся в секундах, 60 секунд x 60 минут = 1 час или 360 секунд. Так что добавьте 360 секунд, чтобы перейти на один час вперед, вычитать о идти один час назад, как это:

$time = time()-360; 
+0

Из того, что я знаю, если вы хотите больше точности, вы можете [получить время в миллисекундах в PHP] (http://currentmillis.com) с помощью microtime (true), которая возвращает секунды, но как значение с плавающей точкой который затем можно умножить на 1000 для миллиса: раунд (microtime (true) * 1000) – Sandman

0

Извините, что повторил мой ответ здесь и в другой вопрос времени.

Это будет работать с любым временем, отформатированный 'YYYY-MM-DD HH: MM: SS' (и, возможно, какое-то время, которые могут быть использованы функции "новый DateTime"

function changetimefromUTC($time, $timezone) {     // SEND YOUR ORIGINAL TIME AND YOUR NEW TIMEZONE 
    $changetime = new DateTime($time, new DateTimeZone('UTC')); //YOUR ORIGINAL TIME GOES HERE 
    $changetime->setTimezone(new DateTimeZone($timezone));  // THIS CHANGES TO THE NEW TIMEZONE 
    return $changetime->format('m/d/y h:i a'); // THIS OUTPUTS THE NEW TIME IN WHATEVER FORMAT YOU WANT 
} 

список. поддерживаемые временные зоны http://us1.php.net/manual/en/timezones.php

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