ログインしているユーザーのローカル タイムゾーンに従って、アプリケーションに日時の値を表示する必要があります。アプリでユーザーのタイムゾーンを自動的に検出し、それに応じて調整されたサーバーの日付と時刻を表示できるようにしたいと考えています。
これを Coldfusion でどのように行うのですか?
Facebook のように、いつでもタイムゾーンを選択するようにユーザーに促さないソリューションを探しています。
ありがとう
ログインしているユーザーのローカル タイムゾーンに従って、アプリケーションに日時の値を表示する必要があります。アプリでユーザーのタイムゾーンを自動的に検出し、それに応じて調整されたサーバーの日付と時刻を表示できるようにしたいと考えています。
これを Coldfusion でどのように行うのですか?
Facebook のように、いつでもタイムゾーンを選択するようにユーザーに促さないソリューションを探しています。
ありがとう
CF で書式設定を行う代わりに、標準化された日付表現 (UTF( など) をプッシュし、JavaScript で日付を書式設定します。そうすることで、日付はコンピュータに設定されているタイムゾーンに合わせて書式設定されます。
これにより、ゾーン変更エリアの近くでの間違ったルックアップ、夏時間とそれが観測されていないエリアの対応、旅行者 (「ホーム タイム」と「ローカル タイム」のフォーマット) を回避できます。
追加した:
これにより、現在の時刻が長い形式でダンプされます。それは半ばすぐに使えるものなので、より多くの書式設定オプションについてJavaScript Date オブジェクトのメソッドを調べたいと思うでしょう。
<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() が必要です。