2009-12-03 14 views
7

に私は、たとえば、すべてのページに日時スタンプを表示するWebアプリケーションを持っている:ユーザーのタイムゾーンの日付/時刻を表示する - クライアント側

2009年12月12日午後6時

私は動的にユーザーのタイムゾーンを検出し、JavaScriptを使用して表示を変更したいと思います。

だから、ニューヨークのユーザーが見るであろう:

2009年12月12日午後6時

カリフォルニア州の利用者が見るだろうが:

2009年12月12日3 :00 pm

いずれかの提案がありますか?

+2

http://prideparrot.com/blog/archive/2011/9/how_to_display_dates_and_times_in_clients_timezone – VJAI

答えて

2

はあなたが素晴らしい「プログレッシブ・エンハンスメント」でそれを行うことができる方法でありますUTCなど)。その後、ロード時に現地時間で交換します(元のタイムゾーンが提供されている場合は、JavaScriptによって自動的に処理されます)。

<div id="timestamp">December 12, 2009 6:00 pm GMT</div> 
<script type="text/javascript"> 
    var timestamp = document.getElementById('timestamp'), 
     t   = new Date(timestamp.innerHTML), 
     hours  = t.getHours(), 
     min  = t.getMinutes() + '', 
     pm  = false, 
     months = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']; 

    if(hours > 11){ 
     hours = hours - 12; 
     pm = true; 
    } 

    if(hours == 0) hours = 12; 
    if(min.length == 1) min = '0' + min; 

    timestamp.innerHTML = months[t.getMonth()] + ' ' + t.getDate() + ', ' + t.getFullYear() + ' ' + hours + ':' + min + ' ' + (pm ? 'pm' : 'am'); 
</script> 
+0

IEがその形式を正しく解析するかどうかは疑問です。 – Bergi

+0

@Bergi - それはIE8で動作するdef + –

+0

IE 11で動作しません –

6

Date.getTimeZoneOffset()を使用すると、GMTからのローカルオフセットを取得できます。

var date = new Date(); 
var offset = date.getTimezoneOffset(); 

そこからSMOP。 オブジェクトを使用すると、date.toDateStringと呼んで、人間が読める日付にすることができます。サーバー側が必要な場合は、JavascriptにGETまたはPOSTを使用してサーバーにオフセットを送信させます。

日付の書式設定は別の話です。 Javascriptはあまり組み込まれていません。あなた自身でハックすることもできますが、その方法ではバグや狂気が嘘です。日付の書式設定は、適切なJavascriptライブラリで提供する必要があります。たとえば、JQueryはDatepicker.formatDateです。あなたはそれを表示したい日付

出力が、その時間帯を指定してください(私はここにGMTを使用しますが、使用することができます:ここで

0

私たちはあなたに多くを助けることができる、日付と時刻に関する機能を持っているExtJSライブラリを使用しています。実際、私のMozilla Firefoxでは、ブラウザのタイムゾーンに従ってすべての日付と時刻が表示されます。

関連する問題