深入JavaScript与.NET Framework中的日期时间(3):JavaScript中的Date类型(中)
2010-09-14 13:31:10 来源:WEB开发网不过,在服务器端是无法得到操作系统的时区和格式设置的。曾经有人认为,操作系统设置的格式可以从Request.UserLanguages数组中获得的Culture信息来得到。其实这个观点是错误的,Request.UserLanguages得到的Culture列表其实是在如下的对话框中设置,如下(打开IE浏览器——工具——Internet选项——语言):
理论上这个设置可以独立于系统的格式和时区设定,我们完全能够使用北京的时区、美国的格式,同时服务器端得到阿拉伯文的信息。另外,在服务器端也是无法直接得到操作系统的时区信息的(事实上,我们都可以使用一个小技巧来获得客户端的格式和时区设定,不过这将会在下一篇文章中讲述)。
如果要将时间根据客户端的设置来显示,则需要将时间的“值”输出至客户端,并且在客户端显示出来。因此,我们可以使用以下的方法。这个方法的精髓在于使用客户端的document.write方法将信息写在页面上。首先,我们定义一个方法用户生成这段脚本:
protected string GetClientDisplayDate(DateTime dt)
{
DateTime utc = dt.ToUniversalTime();
return String.Format(
"<script language='javascript' type='text/javascript'>n" +
" document.write(new Date({0}, {1}, {2}).toLocaleDateString());n" +
"</script>",
dt.Year, dt.Month - 1, dt.Day);
}
上面的代码有三个地方需要注意:
传入的DateTime对象需要调用其ToUniversalTime方法来得到它相应的UTC时间,这点在今后的文章中会谈到。
我们必须使用枚举年、月、日等信息的方法来构造Date类型对象。有人认为可以使用DateTime的Ticks属性来直接使用time value在客户端构造对象,其实这是不对的。.NET Framework中DateTime类型的设计和ECMAScript中Date类型设计不同,它的Ticks属性并不等同于time value。
在传入月份的时候,需要减去1,因为.NET Framework中DateTime类型的Month属性使用1到12表示月份,而ECAMScript中Date类型使用0到11来表示。
于是我们可以使用上面的方法在页面合适的地方显示时间,例如:
<%= GetClientDisplayDate(DateTime.Now) %>
这样,在客户端就会出现如下的脚本代码,这段代码将会使用客户端的系统设置格式来显示日期:
<script language='javascript' type='text/javascript'>
document.write(new Date(2007, 5, 6).toLocaleDateString());
</script>
Tags:深入 JavaScript NET
编辑录入:爽爽 [复制链接] [打 印]更多精彩
赞助商链接