0

如何处理具有不同文化的日期,即我如何使用常见的 javascript 代码来处理所有文化的日期。例如 -

Globalize.culture( "en" );
Globalize.parseDate( "1/2/2003" ); // Thu Jan 02 2003
Globalize.culture( "fr" );
Globalize.parseDate( "1/2/2003" ); // Sat Feb 01 2003

在上面的代码中,我如何制作通用代码而不是更改不同文化的日期格式。

提前致谢

4

3 回答 3

1

你不能。没有所有文化都共享的日期符号。2003 年 1 月 2 日的例子特别能说明问题:你无法知道它的含义,除非你有关于制作它的人使用的文化习俗的可靠信息。事实上,您需要区分 en-US(美国英语)和 en-GB(英国英语)。

Globalize.js 库旨在处理这种变化,而不是删除它。

It is possible to allow different date notations e.g. as follows (code excerpt from my book [Going Global with JavaScript and Globalize.js][1]):
function read(dateInput) { 
  var languages = ['en', 'fi', 'sv', 'ru']; 
  var formats = ['d', 'D']; 
  var date; 
  for(var langNr in languages) { 
    for(var fmtNr in formats) { 
      date = Globalize.parseDate(dateInput,formats[fmtNr],languages[langNr]); 
      if(date != null) { 
        return date; 
      } 
    } 
  } 
  return null; 
}

这将允许在(美国)英语、芬兰语、瑞典语和俄语中使用短日期和长日期表示法,因此它会相当自由,并且适用于期望用户使用其中一种语言的情况。

但是您添加的语言环境越多,就会出现越多的歧义。如果在不同的语言环境中允许使用像 1/2/2003 这样的符号,但其中有多种含义,那么您的循环结构将定义应用哪种含义。这反过来可能意味着输入的含义与用户的意图不同。出于这个原因,最好避免使用全数字日期表示法。需要月份名称的格式更安全。

诸如 2003-02-01 之类的格式在原则上是明确的,但只是在原则上,它们对大多数人来说看起来不自然。不过,您可以在 Globalize.js 中阅读此类格式;您只需要明确指定格式。

于 2012-09-14T11:49:35.237 回答
0

老实说,你的问题不是很清楚。从上下文中,我推断您希望让用户以其本机格式输入日期并使用 Globalize 以某种方式自动“检测”格式将是什么并应用适当的解析方法。

如果那是你所追求的,那是做不到的。您已经了解不同国家/地区的格式差异。更糟糕的是,可能会使用长格式或短格式(不幸的是,Globalize 不支持 .Net 中通过调用 DateTime's 提供的默认格式的概念ToString("g"))。这意味着,您可能有诸如“2012-10-31”、“31.10.12”和“31 października 2012”之类的东西,它们都是(或多或少)有效的波兰日期格式。

我希望你现在意识到允许自由输入不是一个好主意。那么该怎么做呢?答案是使用jQuery UI 的 Datepicker。它可能相当容易本地化,您所要做的就是添加有效的区域脚本:

$( "#datepicker" ).datepicker( $.datepicker.regional[ "fr" ] );

然后,要获取 JavaScript 的 Date 对象,您可以调用 Datepicker 的getDate()方法:

var currentDate = $( ".selector" ).datepicker( "getDate" );

而已。顺便提一句。Datepicker 允许转换最终用户输入的日期(如果您将其附加到文本字段)。但当然它会是区域脚本指定的格式......

于 2012-10-31T19:14:38.703 回答
0

你的意思是国际化。有些标准(例如 ISO8601)指定了明确的格式,例如 2012-02-01 表示 2012 年 2 月 1 日。

我不认为日期格式与“文化”有关,更多的是与国籍有关。世界上绝大多数说英语的人使用日/月/年的格式,这与他们居住的国家有关,而不是他们可能遵循或支持的任何文化。

还有其他明确的格式,例如始终使用月份名称而不是数字,例如 2012 年 2 月 1 日或 2012 年 2 月 1 日。对于公历以外的日历也是如此。

于 2012-09-14T11:09:13.887 回答