За последние 24 часа нас посетили 38335 программистов и 1722 робота. Сейчас ищут 653 программиста ...

Вывод даты + GMT

Тема в разделе "PHP для новичков", создана пользователем Vladsss, 15 апр 2008.

  1. Vladsss

    Vladsss Активный пользователь

    С нами с:
    17 июн 2007
    Сообщения:
    22
    Симпатии:
    0
    Из базы MySQL идет выборка даты (поле date_came, тип timestamp(14), вывод делается в виде DATE_FORMAT(date_came,'%d.%m.%Y (%H:%i)'). В базу заносится время сервера.
    В кукисах у пользователя хранится переменная GMT содержащая величину часового пояса в формате GMT в зависимости от региона проживания (+3,+6,-3).
    Не могу сделать вывод даты в зависимости от значения GMT. То есть если на сервере в Лондоне время 00:30:00, то в посетителю из Москвы, который указал $GMT=+3, выводилось бы 03:30:00
    Функции MySQL работающие в GMT не нашел. Нашел некоторые функции работающие в PHP5 с GMT, но проблема в том, что на сервере стоит еще 4 версия PHP.
    Понимаю, что наверное нужно мудрить, но может у кого то есть изящное и короткое решение.
    Помогите чем сможете...
     
  2. shurastik

    shurastik Активный пользователь

    С нами с:
    22 фев 2008
    Сообщения:
    285
    Симпатии:
    0
    Адрес:
    Латвия
    $t - timestamp с базы, $gmt с куки:

    PHP:
    1.    
    2. <?
    3.    $t += $gmt * 3600;
    4.    echo date('M d Y H:i:s', $t);
    5. ?>
    6.  
    не то?
     
  3. Vladsss

    Vladsss Активный пользователь

    С нами с:
    17 июн 2007
    Сообщения:
    22
    Симпатии:
    0
    Ну вот примерный код.
    Код (Text):
    1.  
    2. $gmt=3;//Часовой пояс
    3. $r = mysql_query("SELECT date_cam FROM table ORDER BY date_cam");
    4. for($i=0;$i<mysql_num_rows($r);$i++)
    5. {  $f=mysql_fetch_array($r);
    6.     $t=$f[date_cam];
    7.     $t += $gmt * 3600;
    8.    echo date('d.m.Y (H:i) ', $t);
    9. echo" ($f[date_cam])<BR>";
    10. }
    Не работает: Выдает 01.01.1970 (09:33) (2008-04-09 12:19:31)
    Вопрос открыт...
     
  4. shurastik

    shurastik Активный пользователь

    С нами с:
    22 фев 2008
    Сообщения:
    285
    Симпатии:
    0
    Адрес:
    Латвия
    а что у тебя в $t попадат? может надо

    PHP:
    1.  
    2. <?
    3.    $t=$f['date_cam'];
    4. ?>
    5.  
    так у тебя не timestamp в базе :? здесь надо использовать чистый timestamp без форматирования
     
  5. Vladsss

    Vladsss Активный пользователь

    С нами с:
    17 июн 2007
    Сообщения:
    22
    Симпатии:
    0
    Точно не timestamp был. Я балбес... Но все таки...
    Что то начало получаться. Но все равно выдает ошибки.
    В базе лежит дата в timestamp(14) 20080415144513 то есть 2008 04 15 14:45:13
    А при gmt=9.5 выводит на экран 24.09.2015 (11:45)
    И аналогичный вопрос если все таки будет у меня datetime стоять...
     
  6. shurastik

    shurastik Активный пользователь

    С нами с:
    22 фев 2008
    Сообщения:
    285
    Симпатии:
    0
    Адрес:
    Латвия
    timestamp - кол-во секунд от начала эпохи Unix.

    а у тебя что-то другое :)

    вот какой должн быть timestamp для данной даты

    PHP:
    1.  
    2. <?
    3.    echo mktime(14, 45, 13, 4, 15, 2008);
    4. ?>
    5.  
    ИМХО, дежишь в базе timestamp, а потом с ПХП форматируешь как хочешь.
     
  7. lexa

    lexa Активный пользователь

    С нами с:
    22 июл 2007
    Сообщения:
    1.746
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    В самом мускуле есть переменная time_zone. Её можн установить: set time_zone = 'Europe/Moscow'. В итоге у нас GMT+3. Для PHP поставить зану можно так: date_default_timezone_set('Europe/Moscow').