2010-11-24 3 views
4

Мне нужно отображать значения даты и времени в приложении в соответствии с локальным часовым поясом пользователя. Я хочу, чтобы мое приложение могло автоматически определять часовой пояс пользователя, а затем отображать настроенную дату и время сервера соответственно.Отображать дату и время в соответствии с часовым поясом пользователя в Coldfusion

Как вы это делаете в Coldfusion?

Я ищу решение, которое НЕ побуждает пользователя выбирать свой часовой пояс в любой момент, например Facebook.

Благодаря

+0

Как правило, вы можете определить только смещение часового пояса пользователей, и это не может учитывать DST. Вы можете попытаться использовать геолокацию IP, но это, как правило, недостаточно специфично в Австралии (пользователи в Брокен-Хилле будут геолокации в Сиднее и не будут использовать часовой пояс). В какой-то момент я уверен, что вы найдете угловой случай, когда вам нужно спросить пользователя. Лучше просто визуализировать даты на стороне клиента (при условии, что пользователи правильно настроили свой компьютер!) – Mark

ответ

1

Было бы быстрее и точнее, если ты просто попросите вашего пользователя указать их часовой пояс, как часть их входа в профиль; установить один раз и забыть.

В противном случае вы смотрите на поиск IP-адреса и определение того, где находится этот IP-адрес, определение часового пояса и последующее отображение времени соответственно. Даже если вы храните информацию в переменной cookie или сессии, ее немного фальсифицируйте, когда вы можете просто спросить своего пользователя, в какой временной зоне они находятся.

+0

Ну да и нет.Я пытаюсь найти часовой пояс по IP, когда пользователь регистрируется. Так что это когда-то. Да, я мог бы попросить об этом, но мой вопрос четко указывает, что НЕ запрашивает пользователя. Просить пользователя выбрать часовой пояс слишком сложно. Это непрофессионалы, а не разработчики :) – Cheeky

+1

В этом случае вам понадобится доступ к коммерческому геокодированию api, например maxmind (http://www.maxmind.com/app/ip-location), после чего вам придется определите часовой пояс пользователей из города, используя что-то вроде tzmap Пола Хэстингга на riaforge: http://tzmap.riaforge.org/ –

+0

Я должен сказать, вау, это крутая толпа, которую вы получили там, если они не знают своих собственный часовой пояс. ;) –

10

Вместо того, чтобы иметь CF сделать форматирование, я бы поставил стандартизированную дату (например, UTF (и JavaScript имеет формат даты). Таким образом, дата отформатирована на любой часовой пояс, установленный на компьютере.

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

Это сбрасывает текущее время в длинном формате. Это полу-офф-манжета, поэтому вы хотите посмотреть на методы JavaScript Date Object для получения дополнительных параметров форматирования.

<cfset n = dateconvert("local2utc",now())> 
<script> 
d = new Date(); 
d.setUTCFullYear(#dateformat(n, "yyyy")#); 
d.setUTCMonth(#dateformat(n, "m")#); 
d.setUTCDate(#dateformat(n, "d")#); 
d.setUTCHours(#timeformat(n, "H")#); 
d.setUTCMinutes(#timeformat(n, "m")#); 
document.write(d.toLocaleString()); 
</script> 
+1

Привет, Бен - не могли бы вы привести примерный код о том, что вы имеете в виду? Спасибо – Cheeky

+1

Не забудьте, что javascript имеет месяцы с номером 0 - 11, поэтому этот 'd.setUTCMonth (#dateformat (n," m ") #);' должен быть 'd.setUTCMonth (#dateformat (n," m ") # - 1); 'для javascript, чтобы показать правильный месяц. –

6

ColdFusion - это серверный язык. Таким образом, вы не можете определить часовой пояс клиента напрямую.

Вы можете использовать JavaSript на стороне клиента, узнать настройки timezoneoffset и отправить его с помощью запроса Ajax на ColdFusion.

JavaScript:

var clienttime = new Date(); 
var time = clienttime.getTimezoneOffset()/60; 

Затем на стороне сервера, вы можете использовать смещение для расчета даты, который вы хотите показать пользователю.

Вы также можете найти страну клиента, используя IP-адрес клиента, но затем вам нужно использовать внешнюю службу, чтобы получить страну для определенного IP-адреса, и вам приходится иметь дело с такими проблемами, как переход на летнее время и несколько часовых поясов на страну ,

-1

, если вы используете cfwheels.org, и ваши пользователи не возражают, чтобы увидеть «вчера» или «10 минут назад» ... тогда TimeAgoInWords() - это то, что вам нужно.