php timestamp utc

У меня есть PHP MySQL запрос, который вставляет некоторые данные в базу данных MySQL и включает в себя временную метку.

В настоящее время запрос INSERT использует NOW() для столбца timestamp и сохраняется в базе данных в следующем формате: 2012-07-24 13:13:02

К сожалению для меня сервер не находится в моем часовом поясе, и он указан как America / Los_Angeles, как показано print date_default_timezone_get();

Я надеялся сделать следующее:

 date_default_timezone_set('Europe/London'); $timefordbLondonEU = date('Ymd H:i:s', time()); 

и просто сохраните в базе данных $timefordbLondonEU вместо NOW() ;

Это хороший способ сохранить такие данные?

Большое спасибо,

Ричард

[ДОБАВЛЕННЫЙ ТЕКСТ]

Я изменил тип в MySQL db на DateTime и сделал следующее:

 date_default_timezone_set('Europe/London'); $timefordbLondonEU = date('Ymd H:i:s', time()); 

Он работает, но я до сих пор не получаю общую концепцию.

 Assumptions based on your comments: 
  1. MySQL = У вас нет типа данных UTC, вы просто используете тип INT.
  2. Unix_TimeStamp () сохранит текущее время или счет? в формате UTC, например, 1343247227.
  3. Поскольку UTC – это счет из общей 0-точной точки, вы можете получить от нее часовой пояс. Предполагая, что вам не нужна дата до отметки 0 баллов в 1970 году.

Моя догадка и результат из того, что вы сказали, это лучший способ сделать это, это сохранить время как UTC в INT (1343247227), а затем сгенерировать любые часовые пояса, которые вы хотите оттуда. Опять же, предполагая, что вам не нужно хранить даты до отметки 0 баллов в 1970 году.

В равной степени почему бы не хранить в качестве даты и времени YYYY-MM-DD HH: MM: SS в известном часовом поясе, а затем конвертировать в UTC или другие часовые пояса. Все это кажется довольно грязным = (

Как сказал @Petah в комментариях, сохраняйте свое время в UTC и скрывайте их в приложении по мере необходимости.

Временные метки Unix находятся в UTC, поэтому я обычно храню свое время в базе данных как временные метки. Это избавляет от головной боли и путаницы первого преобразования в UTC для вставки, а затем из UTC при выборе.

То есть сделайте свое поле времени типом INT и используйте функцию UNIX_TIMESTAMP() в MySQL при вставке или получите time() метку из PHP с помощью функции time() .

Когда вы date_default_timezone_set метку из БД, она будет в формате UTC, но когда вы покажете ее в своем приложении PHP с помощью date() , она будет отображаться в часовом поясе сервера или в любом date_default_timezone_set установленном с помощью date_default_timezone_set .

Поэтому будут работать следующие два запроса:

 INSERT INTO `table` (id, time) VALUES(NULL, UNIX_TIMESTAMP()); // or $time = time(); $query = "INSERT INTO `table` (id, time) VALUES(NULL, $time); 

Если вы хотите выбрать его из БД как DATETIME , вы можете сделать это:

 SELECT *, FROM_UNIXTIME(time) as dt FROM `table` WHERE 1 

Полученный столбец dt будет в формате yyyy-MM-dd hh:mm:ss .

Вы можете отформатировать числовую метку времени в PHP с помощью date()

Если у вас есть версия PHP, 64-разрядная, вы не ограничены диапазоном 1970 – 2036, PHP будет поддерживать 64-битные временные метки, просто убедитесь, что в этом случае нужно использовать столбец BIGINT в MySQL.

Надеюсь, это поможет.