2009-07-06 14 views
5

私は文化不変の形式(ISO 8601)で表すことができる日付があるとしましょう。ブラウザで日付をローカライズしますか?

2009年7月6日午後3時54分、パリのUTC時間、午後5時54分、パリの現地時間で夏時間を観察します。

2009-07-06T15:54:12.000 + 02:00

OK ...のローカライズ版にその文字列を変換するには、ブラウザを教えてくれますマークアップのいずれかの隠された宝石がありますそれ?

最も近い解決策は、JavascriptのDate.prototype.toLocaleString()を使用しています。それは確かに良い仕事ですが、多くの日付に反復するのが遅く、Javascriptに依存しています。

ブラウザーが認識して正しいローカライズされた文字列を自動的にレンダリングするHTML、CSS、XSLT、または他のセマンティックマークアップはありますか?

編集

私は現在、ローカライズされた文字列をHTML要素のテキストを置き換えて使用しています方法:以降で

:JavaScriptを使用して

<span class="date">2009/07/06 15:54:12 GMT</span> 

(jQueryを使って):

var dates = $("span.date", context); 
// use for loop instead of .each() for speed 
for(var i=0,len=dates.length; i < len; i++) { 
    // parse the date 
    var d = new Date(dates.eq(i).text()); 
    // set the text to the localized string 
    dates.eq(i).text(d.toLocaleString()); 
} 

実用的な観点からは、Javascriptを実行するときにテキストを新しい値に「点滅」させ、私はそれが気に入らない。

原則的に、なぜ私たちはこれを行う必要があるのでしょうか?ブラウザは、通貨、日付、数字などの標準的なものをローカライズできる必要があります。


フォローアップの質問

は: - クライアントの設定に応じて、標準的なデータ項目を取り、それをフォーマットなぜブラウザは、/ウェブは、このような単純な機能を持っていませんか?

+0

私はまっすぐアップマークアップ言語を使用してこれを行うためにとにかくあることは知らない。私はかなりあなたがいくつかのスクリプトを使用するつもりだと確信しています。 – Peter

答えて

2

私は自分のサイトでtoLocaleString()を使用しています。私はそのスピードに問題はありませんでした。どのようにDateオブジェクトにサーバーの日付を取得していますか?解析ですか?

サーバーが見ている日付を表示する直前にコメントノードを追加します。コメントノード内には、そのポストの日付/時刻が、エポックからのミリ秒数として表示されます。 Railsでは、例えば:

var date = new Date(); 
date.setTime(msFromEpoch); 
// output date.toLocaleString() 

を彼らはJSを持っていない場合:彼らはJSが有効になっている場合は

<!--<%= post.created_at.to_i * 1000 %>--> 

、私はその後、コメントの値を取得し、それらのノードをつかむためのjQueryを使用します有効にしておくと、自由にコンバージョンを達成できます。

ISO時刻を解析しようとしていると、それが遅い原因になる可能性があります。また、どのくらいの日付を話していますか?

+0

私はISO形式の代わりにダニを使用しようとします - 私はそれがより速くなければならないと思います。日付は50〜100の間です。日付がローカライズされると、画面上には目立つ「フラッシュ」があります。 –

2

残念ながら、ありません。

HTML & CSSはプレゼンテーションに厳密に使用されるため、表示される方法を変更するための「スマート」は組み込まれていません。

サーバー側の言語(.NET、Pythonなど)を使用して、ユーザーに表示する形式で日付をHTMLに出力するのが最善の方法です。

+0

私は、サーバーがクライアントのローカライズされた設定を知る良い方法を持っていたらいいと思います。 –

+0

Do not we all :) – annakata

+4

私はこれを行うための良い "トリック"を見たことがあります。ログインなどのページで、非表示のフォームフィールドを配置し、JavaScriptを使用してユーザーの現在の時刻を書き込んでください。その後、フォームがサーバーに送信されると、ユーザーのシステム時間(JavaScriptあたり)とサーバー時間を比較して、タイムゾーン設定を把握することができます。 – nikmd23

2

HTMLでこれを行うことはできません。このような決断を下すスマートタグはありません。それは厳密にプレゼンテーションです。 Javascriptの道へ

  1. スティック:HTML5は、おそらくこのような何かのためのタグを持っている場合、私は

    はとにかく、私はそれを参照してください方法は、あなたが3つのオプションを持っている...、しかし、不思議を行います。このウェブサイトの詳細については、How do I display a date/time in the user’s locale format and time offset?How can I determine a web user’s time zone?

  2. などの質問があります。ジオロケーションの使用をお試しください。つまり、サーバーサイドのスクリプトは、ユーザーの最初のページ訪問時にそこにある多くのジオラケータサービスの1つにリクエストを送信して、ユーザーの所在を推測します。これの欠点は、時間の約10%が間違っていることです。だから、Javascriptがあなたに手を差し伸べる市場シェアよりもそれほど優れているわけではありません。(すべては、非常に良い方法ではありません。 ..)

  3. あなたは、あなたに合わせた経験を表示したいと思うほとんどのウェブサイトは、知ることができないだけなので、あなたにこのようなことを尋ねます。きちんとした後退として、あなたは<noscript>タグの周りに質問をラップすることができるので、Javascriptを使用している人にJavascriptの経験を提供している間にJavascriptを無効にしている人に尋ねるだけです。

1

言語とユーザーのロケールは、HTTPヘッダーで送信する必要があります。それらを使用して、正しい日付形式のサーバー側を作成してユーザーに表示することができます。ただし、多くのユーザーがOSやブラウザでロケール設定を完全に無視するため、これは望ましくないことがよくあります。だから、あなたはニュージーランド人にアメリカスタイルのタイムスタンプを与えているかもしれません。

上記のコメントに投稿されたトリックは気に入っていますが、非常に異なる方法でタイムスタンプを実装する多数のクライアントを扱うことができるため、QAの頭痛のように聞こえます。

私が見た最も効果的な解決策は、ユーザーが好きな時間形式を選択できるようにするパネルを簡単に提供することです。 ***************************次に、時間形式変換サーバー側を行います。アプリケーション言語のタイムゾーンフォーマットマッピングへのロケールが適切でない場合は、データベースをチェックしてください。多くのデータベースでは、ロケールベースのカスタマイズされたタイムゾーンの書式設定も提供されています。

2

Dojoにはかなり良いものがありますlocalizations for dates and currencies。この方法を使用すると、さまざまな形式(例:短い日付と長い日付)を選択してロケールを強制することもできます。

関連する問題