4

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

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

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

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

4

8 回答 8

4

您正在使用 Microsoft Ajax 框架,该框架定义了一组“客户端类型扩展”,它们为 JavaScript 基本类型提供了附加功能或“扩展”。

日期类型扩展是您正在寻找的,特别是Date.parseLocale函数

使用此函数,您可以使用给定的格式解析字符串。

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

看看这篇文章:

于 2009-07-24T02:18:54.710 回答
2

请参阅toLocaleString和相关函数。

于 2009-04-30T21:10:16.387 回答
2

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

至于客户端的格式化,由于我已经在使用Dojo,所以我通过使用dojo.date.locale.format. 这是完全无痛的。

  • 语言环境是自动检测的,也可以任意设置。
  • 速记格式选项(例如:long short)
  • 数据选择器(例如:时间、日期)
  • 能够指定任意日期/时间模式(可能不适用于此应用程序,但仍然有用)。

教程: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

于 2009-07-26T09:02:18.593 回答
1

您可以使用的三件事:

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

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

3) 使用代码背后的文化 - 在您的 javascript 中创建一个变量,当页面加载时,它将在您的代码中调用一个this.Page.Culture从那里返回的函数,您将知道字符串被发送回的文化。这将消除前两种解决方案可能导致的不匹配。确保它正确显示需要一些额外的工作,但至少您将能够使用该字符串而不会出现文化不匹配的可能性。

于 2009-05-05T13:19:46.350 回答
1

对于您的问题, toLocaleDateString将是比toLocaleString更好的解决方案,因为它不包括时间(因为您只请求日期)。

于 2009-07-25T16:50:11.420 回答
1

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

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

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

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

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

于 2009-07-30T06:10:55.060 回答
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 日历本地化为您的特定文化。

即使您不使用 ASP.NET Ajax,添加 ScriptManager 并启用本地化也会为您提供一个有用的 javascript 变量,该变量称为__cultureInfo包含本地化格式的 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....
于 2009-07-28T09:22:01.700 回答
0

我通过使用 Datejs 解决了这个问题

  • 在 codebehind(aspx.cs) 中,我获得了员工的文化,并将适当的 js 添加到标题中

字符串路径 = " 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 对象的结构与函数预期的不同)。

于 2009-10-14T16:40:29.797 回答