根据文化显示正确的日期格式

时间:2009-04-30 21:05:47

标签: asp.net javascript culture date-format

我正在使用弹出日历日期选择器的控件。这使用javascript函数SetText将文本框设置为给定日期。我无法更改日历控件本身的任何内容,但我可以覆盖SetText函数。 SetText javascript只是以字符串格式获取TextBox名称和日期值,并将TextBox设置为字符串。

问题: 我需要以“4月30日”的格式显示日期。

容易做到。使用getMonth()和getDate(),我可以从那里解析信息。

现在,我需要确保正确显示不同文化。例如,英国将日期显示为“4月30日”。由于代码隐藏(c#)可能以英国格式发送日期,我如何在javascript中知道他们使用英国(dd / mm / yyyy)而非美国(mm / dd / yyyy)?
浏览器导航器语言可以设置为一个设置,而服务器设置为另一个设置,导致1月4日为4月1日不匹配。

8 个答案:

答案 0 :(得分:4)

您正在使用Microsoft Ajax Framework,此框架定义了一组“client-side type extensions”,它为JavaScript基类型提供了附加功能或“扩展”。

Date Type Extensions正是您要找的,特别是Date.parseLocale function

使用此功能,您可以使用给定格式解析字符串。

您可以通过将ScriptManager.EnableScriptGlobalization属性设置为true来同步服务器端和客户端文化,并使用Date.parseLocale函数而不指定任何格式。

看一下这篇文章:

答案 1 :(得分:2)

请参阅toLocaleString及相关功能。

答案 2 :(得分:2)

如果您控制后端,为什么不发送时间戳并将其推送到Date对象?

至于客户端的格式化,因为我已经在使用Dojo,所以我使用dojo.date.locale.format解决了这个问题。这完全是无痛的。

  • 自动检测区域设置或可以任意设置区域设置。
  • 速记格式选项(例如:长短)
  • 数据选择器(例如:时间,日期)
  • 能够指定任意日期/时间模式(可能不适用于此应用程序,但仍然有用)。

教程:http://docs.dojocampus.org/dojo/date/locale
API文档: http://api.dojotoolkit.org/jsdoc/1.3/dojo.date.locale.format
日期格式说明:http://www.unicode.org/reports/tr35/tr35-4.html#Date_Format_Patterns

答案 3 :(得分:1)

你可以使用三件事:

1)toLocaleString - 正如已经建议的那样。这个问题是当发送一个“4/1/2009”的字符串时,这可能导致一些事情。 1月4日或4月1日。

2)navigator.language和navigator.systemLanguage - 获得日期字符串后,您可以检查系统所使用的语言并从那里解析日期。如果您有英国服务器并且浏览器机器是美国的,那么这个和解决方案1的问题就是这个问题。您将拥有4月1日发送的代码作为1/4/2009,其中javascript将读取字符串作为客户端浏览器的任何语言。因此,英国服务器和美国浏览器会给你一个错误的结果。

3)使用Code Behinds Culture - 在你的javascript中创建一个变量,当页面加载时,它会在你后面的代码中调用一个函数,从那里返回this.Page.Culture,你会知道字符串是什么文化送回来了。这将消除前两种解决方案可能导致的不匹配。需要做一些额外的工作才能确保它正确显示,但至少你可以使用字符串而不会有不匹配的文化。

答案 4 :(得分:1)

对于您的问题,

toLocaleDateString会比toLocaleString更好,因为它不包含时间(因为您只是请求日期)。

答案 5 :(得分:1)

开源JavaScript库Date.js有一些很好的格式化日期的方法,并且它支持一堆语言:

Google代码中的Date.js:http://code.google.com/p/datejs/

如果您想要格式良好的日期/时间,您只需将a formatting string(几乎与.NET Framework中使用的相同)传递到任何Date对象的.toString()方法。

它还有一整套文化,允许您简单地为该文化包含适当的文字。

如果您想自己管理(就像我们在应用程序中那样),您可以找到资源,为您提供给定文化的适当资源字符串列表。这里显示了大量文化的正确格式字符串:http://www.transactor.com/misc/ranges.html

答案 6 :(得分:0)

当您使用ASP.NET时,您可能也在使用ASP.NET Ajax。如果是这样,ScriptManager上有两个对您有用的属性:

EnableScriptLocalization - 获取或设置一个值,该值指示ScriptManager控件是否呈现脚本文件的本地化版本。

EnableScriptGlobalization - 获取或设置一个值,该值指示ScriptManager控件是否呈现支持解析和格式化特定于文化的信息的脚本。

<asp:ScriptManager ID="AjaxManager" runat="Server" EnablePartialRendering="true"
            EnableScriptGlobalization="true" EnableScriptLocalization="true" />

当你启用这两个(设置为true)时,ASP.NET Ajax扩展程序等应该自动本地化为web.config中指定的文化:

<configuration>
  <system.web>
    <globalization 
       fileEncoding="utf-8" 
       requestEncoding="utf-8" 
       responseEncoding="utf-8" 
       culture="en-GB" 
       uiCulture="en-GB" />  
  </system.web>
</configuration>

例如,设置此项会将AjaxControlToolkit Calendar本地化为您的特定文化。

即使您没有使用ASP.NET Ajax,添加ScriptManager并启用本地化也会为您提供一个名为__cultureInfo的有用javascript变量,其中包含JSON数组的本地化格式,例如货币,日期等。

"CalendarType":1,"Eras":[1],"TwoDigitYearMax":2029,"IsReadOnly":true},"DateSeparator":"/","FirstDayOfWeek":1,"CalendarWeekRule":0,"FullDateTimePattern":"dd MMMM yyyy HH:mm:ss","LongDatePattern":"dd MMMM yyyy","LongTimePattern":"HH:mm:ss","MonthDayPattern":"dd MMMM","PMDesignator":"PM","RFC1123Pattern":"ddd, dd MMM yyyy HH\u0027:\u0027mm\u0027:\u0027ss etc....

答案 7 :(得分:0)

我使用Datejs作为

解决了这个问题
  • 在codebehind(aspx.cs)中,我获得了员工的文化,并将相应的js添加到标题中
  

string path =   “http://datejs.googlecode.com/svn/trunk/build/date-”   + GetCulture()+“。js”; Helper.AddJavaScript(this,path);

(在您的情况下,您可以从navigator.systemLanguage(或navigator.browserLanguge等)获取文化,并在标题中添加脚本标记,其中src属性指向相应的路径)

  • 在客户端我使用
  

d.toString(Date.CultureInfo.formatPatterns.shortDate)

其中d是任何日期对象 (我尝试使用Date.today()。toShortDateString()但它抛出了异常。(CultureInfo JSON对象的结构与函数期望的结构不同。)