在浏览器上本地化日期?

Jef*_*ang 5 html javascript css xslt localization

假设我有一个可以用文化不变格式表示的日期(ISO 8601).

我将选择2009年7月6日,UTC时间下午3:54在巴黎,也就是当地时间下午5:54在巴黎观察夏令时.

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>
Run Code Online (Sandbox Code Playgroud)

使用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());
}
Run Code Online (Sandbox Code Playgroud)

从实际的角度来看,当Javascript运行时,它会使文本"闪烁"到新值,我不喜欢它.

从原则的角度来看,我不明白为什么我们需要这样做 - 浏览器应该能够本地化标准的东西,如货币,日期,数字,只要我们这样标记它.


后续问题:为什么浏览器/ Web没有这么简单的功能 - 采用标准数据项,并根据客户端的设置进行格式化?

Chr*_*ett 3

我在我的网站上使用 toLocaleString(),而且我从来没有遇到过它的速度问题。如何将服务器日期获取到 Date 对象中?解析?

我在显示服务器看到的日期之前添加了一个注释节点。评论节点内是该帖子的日期/时间,以自纪元以​​来的毫秒数表示。以 Rails 为例:

<!--<%= post.created_at.to_i * 1000 %>-->
Run Code Online (Sandbox Code Playgroud)

如果他们启用了 JS,我会使用 jQuery 来获取这些节点,获取注释的值,然后:

var date = new Date();
date.setTime(msFromEpoch);
// output date.toLocaleString()
Run Code Online (Sandbox Code Playgroud)

如果他们没有启用 JS,他们可以随意在头脑中进行转换。

如果您尝试解析 ISO 时间,这可能是导致速度缓慢的原因。另外,我们正在谈论多少次约会?