Mysql PHP Store и отображение времени покупки для правильного часового пояса пользователя - PullRequest
0 голосов
/ 22 мая 2011

У меня есть настройка, в которой я хочу сохранить время покупки с точностью до секунды.На данный момент я использую CURTIME () для этого.Прямо сейчас он возвращает время в этом формате 16:03:59, что мне делать, если я хочу сохранить и затем отобразить время в правильном часовом поясе, например 14:03?Спасибо.

$qry = "INSERT INTO purchases
   (id, qty, Date, Time, product_id, totalprice)
   VALUES('$id', '$qty', CURDATE(), CURTIME(),'$pid', '$price')";
$result = @mysql_query($qry);

Ответы [ 3 ]

0 голосов
/ 22 мая 2011

Во-первых, я бы сохранил значение time (), а затем, при необходимости, сделал бы преобразования в строку в соответствующем часовом поясе. Это делает его немного более элегантным, если пользователь меняет свой часовой пояс, например, во время путешествия.

Чтобы отформатировать часовой пояс пользователя, вы можете получить часовой пояс, используя Javascript, затем передать его в PHP и отформатировать соответствующим образом. Об этом спрашивали / отвечали раньше:

Javascript / PHP и часовые пояса

0 голосов
/ 22 мая 2011

Я бы сохранил ваши значения времени в UTC, используя UTC_TIMESTAMP, а затем захватил бы их, используя формат даты ISO:

SELECT DATE_FORMAT(UTC_TIMESTAMP, GET_FORMAT(DATETIME, 'ISO'));

Который, запущенный немного назад, дает:

2011-05-22 17:53:23

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

$timeZone = 'America/Los_Angeles';
$dateSrc = '2011-05-22 17:53:23';

$dateTime = new DateTime($dateSrc, new DateTimeZone('GMT'));
$dateTime->setTimeZone(new DateTimeZone($timeZone));
echo "Result is: " . $dateTime->format('Y-m-d H:i:s');

Пример выполнения:

$ php test.php 
Result is: 2011-05-22 10:53:23
0 голосов
/ 22 мая 2011

Пара вещей:
1) имеет смысл объединить столбцы Date & Time в один, скажем, столбец orderDate в виде даты-времени MySQL (тогда вы можете просто использовать NOW () для значения вставки)

2) PHP имеет отличные документы: http://php.net/manual/en/function.date.php

Чтобы установить часовой пояс для посетителя часового пояса UTC:

date_default_timezone_set('UTC'); // replace with variable, probably stored in user's session

Кстати, не уверен, что MySQL обеспечивает настройку часового пояса на лету (вероятно, установлен по умолчанию на сервере), поэтому вам, вероятно, придется форматировать orderDate с помощью функции даты в php, указанной выше.

Итак, чтобы подвести итог, в цикле результатов запроса, используя $ q, ваше отображение может быть:

echo date("Y-m-d h:i:s", strtotime($q[''orderDate]));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...