我需要根據登錄用戶的本地時區在我的應用程序中顯示日期時間值。我希望我的應用能夠自動檢測用戶的時區,然後相應地顯示調整後的服務器日期和時間。根據用戶在Coldfusion中的時區顯示日期和時間
你如何在Coldfusion中做到這一點?
我正在尋找一種解決方案,不會提示用戶在任何時候選擇他們的時區,如Facebook。
感謝
我需要根據登錄用戶的本地時區在我的應用程序中顯示日期時間值。我希望我的應用能夠自動檢測用戶的時區,然後相應地顯示調整後的服務器日期和時間。根據用戶在Coldfusion中的時區顯示日期和時間
你如何在Coldfusion中做到這一點?
我正在尋找一種解決方案,不會提示用戶在任何時候選擇他們的時區,如Facebook。
感謝
如果你沒有隻問你的用戶指定的時區作爲登錄的個人資料的一部分,這將是更快,更準確;設置一次,忘記。
否則,您正在查找IP地址並確定IP地址的基礎,確定時區並相應顯示時間。即使您將信息存儲在cookie或會話變量中,當您只需要詢問用戶所在的時區時,也可以使用它。
嗯,是的,沒有。我的目標是在用戶註冊時按IP查找時區。所以它已經關閉了。是的,我可以要求 - 但我的問題明確指出不提示用戶。要求用戶選擇時區太過技術性。他們是外行,而不是開發人員:) – Cheeky 2010-11-24 15:50:59
在這種情況下,您需要訪問商業地理編碼api,例如maxmind(http://www.maxmind.com/app/ip-location),之後您必須使用類似Paul Hasting在riaforge上的tzmap來確定用戶在城市的時區:http://tzmap.riaforge.org/ – 2010-11-24 16:12:44
而不是讓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>
ColdFusion是一種服務器端語言。因此,您無法直接確定客戶的時區。
您可以在客戶端使用JavaSript,找出timezoneoffset並通過Ajax請求發送給ColdFusion。
的JavaScript:
var clienttime = new Date();
var time = clienttime.getTimezoneOffset()/60;
然後在服務器端,您可以用補償來計算要顯示給用戶的日期。
您還可以使用客戶端IP查找客戶的國家,但是您必須使用外部服務才能獲取特定IP的國家/地區,並且您必須處理夏令時和每個國家/地區的多個時區等問題。
如果您使用的是cfwheels.org並且您的用戶不介意看到「昨天」或「10分鐘前」......那麼TimeAgoInWords()就是您所需要的。
通常您只能確定用戶時區偏移量,並且這不能考慮DST。您可以嘗試使用IP地理位置,但這在澳大利亞通常不夠具體(Broken Hill的用戶將地理位置定位到悉尼,並且不會共享時區)。在某個時候,我很肯定你會發現一個角落的情況下,你需要問用戶。最好只提供日期客戶端(假設用戶已經正確設置了他們的計算機!) – Mark 2013-10-04 00:41:04