2012-09-14 90 views
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 

在上面的代码如何我可以使而不是改变的日期格式为不同文化的通用代码。

在此先感谢

回答

0

您的意思是国际化。有些标准,如ISO8601,指定明确的格式,如2012年2月1日的2012-02-01。

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

还有其他明确的格式,例如总是使用月份名称而不是数字,例如, 2012年2月1日或2012年2月1日。格里高利日历以外的日历也是同样的作品。

1

你不能。没有任何文化共享的日期符号。 1/2/2003的例子特别具有说明性:除非你有关于制作它的人使用的文化习俗的可靠信息,否则你无法知道它的含义。事实上,您需要区分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中阅读这些格式;你只需要明确指定格式。

0

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

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

我希望你现在意识到允许自由格式输入不是一个好主意。那么做什么呢?答案是使用jQuery UI's Datepicker。这可能是相当容易的本地化,所有你需要做的是增加有效区域脚本:

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

然后,获取JavaScript的Date对象调用日期选择器的getDate()方法:

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

就是这样。 BTW。 Datepicker允许转换最终用户输入的日期(如果您将其附加到文本字段)。但当然这将是区域脚本指定的格式...