Javascript 带有日历日期的全球化问题

Javascript 带有日历日期的全球化问题,javascript,globalization,jquery-globalization,Javascript,Globalization,Jquery Globalization,如何处理具有不同文化的日期,即如何使用通用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 在上面的代码中,我如何生成通用代码,而不是为不同的区域性更改日期格式 提前谢

如何处理具有不同文化的日期,即如何使用通用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
在上面的代码中,我如何生成通用代码,而不是为不同的区域性更改日期格式


提前谢谢你的意思是国际化。有些标准,如ISO8601,规定了明确的格式,如2012年2月1日的2012-02-01

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


还有其他明确的格式,例如始终使用月份名称而不是数字,例如2012年2月1日或2012年2月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中阅读这些格式;您只需要明确指定格式。

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

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

我希望你现在意识到允许自由形式的输入不是一个好主意。那么该怎么办呢?答案是使用。它可能很容易本地化,您只需添加有效的区域脚本:

$( "#datepicker" ).datepicker( $.datepicker.regional[ "fr" ] );
然后,要获取JavaScript的日期对象,调用Datepicker的
getDate()
方法:

var currentDate = $( ".selector" ).datepicker( "getDate" );
就这样。顺便说一句,Datepicker允许转换最终用户输入的日期(如果将其附加到文本字段)。但当然它将是区域脚本指定的格式