Это просто с JavaScript и PHP:
Несмотря на то, что пользователь может связываться со своими внутренними часами и / или часовым поясом, лучший способ найти смещение до сих пор - new Date().getTimezoneOffset();
. Он неинвазивен, не вызывает головных болей и избавляет от необходимости полагаться на третьих лиц.
Допустим, у меня есть таблица users
, которая содержит поле date_created int(13)
для хранения меток времени Unix;
Предполагая, что клиент creates a new account
, данные принимаются post
, и мне нужно insert/update
date_created column
с меткой времени клиента Unix, а не с сервера.
Поскольку timezoneOffset необходим во время вставки / обновления, он передается как дополнительный элемент $ _POST, когда клиент отправляет форму, что устраняет необходимость сохранять ее в сеансах и / или файлах cookie, и не требует дополнительного сервера. Хиты либо.
var off = (-new Date().getTimezoneOffset()/60).toString();//note the '-' in front which makes it return positive for negative offsets and negative for positive offsets
var tzo = off == '0' ? 'GMT' : off.indexOf('-') > -1 ? 'GMT'+off : 'GMT+'+off;
Скажем, сервер получает tzo
как $_POST['tzo']
;
$ts = new DateTime('now', new DateTimeZone($_POST['tzo']);
$user_time = $ts->format("F j, Y, g:i a");//will return the users current time in readable format, regardless of whether date_default_timezone() is set or not.
$user_timestamp = strtotime($user_time);
Вставить / обновить date_created=$user_timestamp
.
При получении date_created вы можете преобразовать отметку времени следующим образом:
$date_created = // Get from the database
$created = date("F j, Y, g:i a",$date_created); // Return it to the user or whatever
Теперь этот пример может соответствовать вашим потребностям, когда речь идет о вставке first
отметки времени ... Когда речь идет о дополнительной отметке времени или таблице, вы можете рассмотреть возможность вставки значения tzo в таблицу users для будущая ссылка или установка в качестве сеанса или файла cookie.
P.S. НО что делать, если пользователь путешествует и переключает часовые пояса. Вход в GMT + 4, быстрое перемещение в GMT-1 и вход снова. Последний логин будет в будущем.
Я думаю ... мы слишком много думаем.