дата для часового пояса

catindev

сферический распездяй в вакууме
имеется дата поста в БД.
как эту дату преобразовать к в часовому поясу, полученной в js допустим -6?

то есть, допустим, дата 2012-09-18 21:15
как вывести эту дату для конкретного часового пояса, допустим, -6 чтобы она была 2012-09-18 13:15

часовой пояс получаю таким js кодом

var time_zone = (new Date().getTimezoneOffset()/60);
 

catindev

сферический распездяй в вакууме
ок. сам разобрался. вот универсальное решение

PHP:
echo  gmdate('Y-m-d H:i',  strtotime($server_date) + (3600 * abs($timezone)));
здесь $server_date - дата из базы, $timezone - временная зона (ака часовой пояс) полученный в js
 

catindev

сферический распездяй в вакууме
потому, что зона может прийти с минусом
 

catindev

сферический распездяй в вакууме
нет

для отрицательной зоны
PHP:
echo  gmdate('Y-m-d H:i',  strtotime($server_date) + (3600 * abs($timezone)));
для положительной
PHP:
echo  gmdate('Y-m-d H:i',  strtotime($server_date) - (3600 * abs($timezone)));
 

catindev

сферический распездяй в вакууме
только туту один существенный недостаток.. не учитывается не целое число зоны, например - -03:30 для ньюфауленда или +05:45 для катманду
 

Вурдалак

Продвинутый новичок
Unix timestamp для любой tz одинаков, так что способ неправославный.

Ну, а по поводу
нет

для отрицательной зоны
PHP:
echo  gmdate('Y-m-d H:i',  strtotime($server_date) + (3600 * abs($timezone)));
для положительной
PHP:
echo  gmdate('Y-m-d H:i',  strtotime($server_date) - (3600 * abs($timezone)));
У тебя в школе что по математике было?
 

catindev

сферический распездяй в вакууме
Вурдалак ок, я в php чайник предложите решение с Unix timestamp

у меня есть поле в таблице date тип поля TIMESTAMP и значение по умолчанию CURRENT_TIMESTAMP

естевственно дата выставляется серверная. мне же нужно для каждого пользователя показывать эту дату согласно его часового пояса
 

kvf77

Red Devil
Дата выставляется именно со стороны сервера, тебе просто нужно брать дату сервера и брать пояс пользователя и считать смещение. Ты неправильно понимаешь идеологию поясов. Пояс относится не только по отношению к автору поста, например, но и по отношению к читающему.

Ситуации просты, например, пользователь написал письмо вчера в 23:00. Я читаю его сегодня и я хочу видеть правильную дату, согласно СВОЕГО смещения, а не смещения автора поста. Иначе нет никакого смысла во временной зоне.
 

catindev

сферический распездяй в вакууме
получается так..
дату в БД я получаю в Unix timestamp функцией time()
а когда мне ее надо вывести, то я устанавливаю временню зону с помощью date_default_timezone_set
и вывожу дату так
PHP:
echo date('d M H:i',$date);
 

kvf77

Red Devil
как вариант, только учти, то смещение надо брать того, кто читает, а не того кто написал
 

catindev

сферический распездяй в вакууме
kvf77

согласен. часовой пояс получаю с помощью js вот так

var time_zone = (new Date().getTimezoneOffset()/60);

и устанавливаю в php вот так

date_default_timezone_set('Etc/GMT'.$timezone);

получается что дата выводится для того кто читает
 

Sufir

Я не волшебник, я только учусь
kvf77
согласен. часовой пояс получаю с помощью js вот так
var time_zone = (new Date().getTimezoneOffset()/60);
и устанавливаю в php вот так
date_default_timezone_set('Etc/GMT'.$timezone);
получается что дата выводится для того кто читает
Только GMT Deprecated как в JS так и в PHP. Пользуйся UTC.

А как передаёшь, если не секрет? Куки или у тебя на аяксе весь сайт?
 

catindev

сферический распездяй в вакууме
Sufir
куки, но думаю переделать на аякс
 
Сверху