我需要根据登录用户的本地时区在我的应用程序中显示日期时间值。我希望我的应用能够自动检测用户的时区,然后相应地显示调整后的服务器日期和时间。
您如何在 Coldfusion 中做到这一点?
我正在寻找一种不会提示用户在任何时候选择他们的时区的解决方案,比如 Facebook。
谢谢
我需要根据登录用户的本地时区在我的应用程序中显示日期时间值。我希望我的应用能够自动检测用户的时区,然后相应地显示调整后的服务器日期和时间。
您如何在 Coldfusion 中做到这一点?
我正在寻找一种不会提示用户在任何时候选择他们的时区的解决方案,比如 Facebook。
谢谢
我不会让 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 的国家/地区,并且您必须处理夏令时和每个国家/地区多个时区等问题。
如果您只是要求您的用户将他们的时区指定为他们的登录配置文件的一部分,那将会更快、更准确;设置一次就忘记了。
否则,您正在查看 IP 地址查找并确定该 IP 地址所在的位置,确定时区,然后相应地显示时间。即使您将信息存储在 cookie 或会话变量中,当您可以询问您的用户他们所在的时区时,这也有点麻烦。
如果您正在使用 cfwheels.org 并且您的用户不介意看到“昨天”或“10 分钟前”......那么 TimeAgoInWords() 就是您所需要的。