2009-07-06 65 views
5

假設我有一個日期,我可以在文化不變的格式(ISO 8601)中表示。在瀏覽器上本地化日期?

我會在2009年7月6日下午3點54分在巴黎當地時間下午5:54觀察夏令時在巴黎UTC時間。

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

OK ......是有標記的任何隱藏的寶石,將告訴瀏覽器這個字符串轉換成的本地化版本它?

最接近的解決方案是使用Javascript的Date.prototype.toLocaleString()。它確實做得很好,但迭代大量日期可能會很慢,並且依賴於Javascript。

是否有HTML,CSS,XSLT或其他語義標記,瀏覽器會識別並自動呈現正確的本地化字符串?

編輯

我現在使用的是與本地化的字符串替換HTML元素的文本的方法:

與開始:

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

使用JavaScript(用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運行時,它會將文本「flash」變爲新值,而我不喜歡它。

從原理的角度來看,我不明白爲什麼我們需要這樣做 - 瀏覽器應該能夠本地化標準的東西,如貨幣,日期,數字,只要我們標記爲這樣。


一個跟進的問題:爲什麼瀏覽器/網絡沒有這麼簡單的功能 - 以一個標準的數據項,並格式化根據客戶端的設置?

+0

我不知道有無論如何使用直接標記語言來做到這一點。我很肯定你會使用一些腳本。 – Peter 2009-07-06 19:53:38

回答

2

我在我的網站上使用toLocaleString(),我從來沒有遇到它的速度問題。你如何獲得服務器日期到日期對象?解析?

我在服務器看到它之前顯示日期之前添加了一個註釋節點。在評論節點內,該帖子的日期/時間是自紀元以來的毫秒數。在Rails中,例如:

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

如果他們啓用了JS,我使用jQuery抓住這些節點,獲得註釋的值,則:

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

如果他們沒有JS啓用後,他們可以自由地進行轉換。

如果您試圖解析ISO時間,那可能是您的速度緩慢的原因。另外,我們正在談論多少日期?

2

不幸的是,沒有。

HTML & CSS嚴格用於演示,因此,沒有內置的「智能」來改變事物的顯示方式。

最好的辦法是使用服務器端語言(如.NET,Python等)以您希望它們顯示給用戶的格式將日期發送到HTML中。

+0

我希望服務器有一個很好的方式來了解客戶端的本地化設置。 – 2009-07-06 19:53:03

+0

難道我們都不是:) – annakata 2009-07-06 19:55:57

2

不可能用HTML做到這一點,它沒有智能標籤可以做出任何類似的決定。這是嚴格的表象。我納悶,不過,如果HTML5或許有這樣的標籤...

不管怎麼說,我看到它的方式,你有3種選擇:

  1. 棒給Javascript的方式。本網站上有更多詳細的問題,如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. 嘗試使用地理位置。也就是說,您的服務器端腳本會在用戶首次訪問頁面時觸發對其中一個geolocator服務的請求,以嘗試猜測用戶的位置。這樣做的缺點是,它會在10%的時間內出錯,所以它不會比Javascript的市場份額好得多......(總而言之,這不是一個很好的方法。 ..)

  3. 問問用戶!你會看到大多數想要爲你呈現定製體驗的網站會問你這種事情,因爲這是不可能知道的。作爲一個整齊的後備,你可以圍繞<noscript>標籤打包問題,所以你只問那些Javascript的用戶禁用,同時提供了JavaScript的經驗,那些有它。

1

語言和用戶的區域設置應該在HTTP標頭上發送。您可以使用這些來創建正確的日期格式服務器端以顯示給用戶。但是,這通常是不可取的,因爲許多用戶完全忽略了他們的操作系統和/或瀏覽器中的區域設置。所以,你可能會把美國風格的時間戳給新西蘭人。

我喜歡上面評論中發佈的技巧,但這聽起來像是一個QA頭痛,因爲你可能正在處理大量客戶端以不同的方式實現時間戳。

我見過的最有效的解決方案是簡單地提供一個面板讓用戶選擇他們喜歡的時間格式。有些用戶甚至會像ISO格式一樣使用。然後你做時間格式轉換服務器端。如果您的應用程序語言的時區格式映射沒有良好的語言環境,請檢查您的數據庫。許多數據庫也提供基於區域的自定義時區格式。