我正在使用弹出日历日期选择器的控件。这使用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日不匹配。
答案 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作为
解决了这个问题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对象的结构与函数期望的结构不同。)