如何将日期字符串中的外部月份转换为英语

时间:2012-09-25 22:23:31

标签: javascript globalization datetime-format

以下对另一个主题的回答似乎是我认为我需要的开始,但我在实现它时遇到了困难。

  

为此目的最好的图书馆可能是Globalize。它   允许您指定区域设置(它被称为文化,但它是   实际上相同),格式(内置或您自己)和实际   将字符串解析为给定日期:

     

var dateString =“lunes,29 de agosto de 2011”; //好像很久   西班牙语日期格式= dateize.parseDate(dateString,   “D”,“es”);

     

您需要附加适当的文化文件以及参考   全球化使其发挥作用。请注意文化已经存在   在库中定义,所以不要害怕网上的消息   页面,你实际上不需要.Net。

如果有人可以将其变成一个有效的例子,我可以接受这个并调整我需要的东西。

然而......有没有人知道另一种方法?

我的字符串例如是:

设置 24,2012 20:40:20”这个月有罗马尼亚语。

我需要它

9月 24,2012 20:40:20”这个月有英文版。

我需要一个可以采用语言代码的解决方案(即en,es,pl,ru,ro等)并转换字符串中的月份(需要能够处理所有12个月,而不仅仅是以上字符串)从外语到英语。

任何快速的帮助都会非常受欢迎,这样我就可以让我的网站重新启动并再次全速运行。

如果您需要我的任何进一步信息,请询问:)

此致 罗斯

@Jukka K. Korpela

我有这个:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Testing Globalize</title>
<meta name="keywords" content="Globalize, Testing">
<meta name="description" content="Trying to get globalize to work.">
<script src="https://github.com/jquery/globalize/blob/master/lib/globalize.js"></script>
<script src="https://github.com/jquery/globalize/blob/master/lib/cultures/globalize.cultures.js"></script>
<script>
var monthString = 'sep'; // replace by code that extracts the string
var lang = 'ro';          // replace by code that picks up the right language
var month = Globalize.parseDate(monthString, 'MMM', lang);
if(month) {
  document.write(Globalize.format(month, 'MMM', 'en'));
} else {
  alert('Unrecognized month: ' + monthString);
}
</script>
</head>

但是当我在“http://htmledit.squarefree.com/”中测试时它无法正常工作,请帮助:)

3 个答案:

答案 0 :(得分:1)

我想你可以将datejs用于你的目的。 它能够通过文化文件以任何可用语言(150+作为州)解析您的日期数据,然后将其保存为英语或您想要的任何其他语言。

看看:http://code.google.com/p/datejs/

答案 1 :(得分:0)

在Globalize.js中执行此类操作的方法是使用一个语言环境读取字符串,使用另一个语言环境编写它。您需要通过检查null值的某个测试来检查读取是否成功(因为此值表示错误)。像这样:

<script src="globalize.js"></script>
<script src="globalize.cultures.js"></script>
<script>
var monthString = 'sep.'; // replace by code that extracts the string
var lang = 'ro';          // replace by code that picks up the right language
var month = Globalize.parseDate(monthString, 'MMM', lang);
if(month) {
  document.write(Globalize.format(month, 'MMM', 'en'));
} else {
  alert('Unrecognized month: ' + monthString);
}

这只解析月份缩写或月份的“短名称”。

问题在于文化内部的变异。例如,对于罗马尼亚语,9月的短名称是Globalize.js data中的“sep。”(主要基于.NET数据; Datejs可能基于相同的数据),但{{3}中的“9月”。数据,您的示例提到“设置”!

Globalize.js不区分大小写地读取名称,但是它在其语言环境定义中使用了确切的字符串(例如,如果定义说“sep。”,则“sep”不会这样做)。有很多方法可以解决这个问题。最简单的是,编辑Globalize.js中的区域设置定义以匹配数据中使用的区域设置定义。或者,您可以创建具有不同月份名称的备用区域设置(变体),如果它不根据基本区域设置进行分析,则使用它解析名称。因此,这是一种在输入时允许语言的不同月份名称集合的方法。

当然,如果仅 将短月份名称从不同语言映射到英语,您可以直接为其编写代码。但是你仍然需要从某个地方(从.NET,CLDR或实际数据中)将名称输入到对象中。

答案 2 :(得分:0)

我在2013年偶然发现了这个困难,并且确实致力于解决这个问题。

我昨天发布了v3:https://framagit.org/Siltaar/month_nb

它支持69种语言,您不必知道月份名称的语言即可获取其编号。它基于可重用的独立JSON树形结构来存储数据,并通过一个小的树遍历循环来查找结果。

要使用它,只需在网页中同时包含数据和tree-walker文件:

<script src="month_nb_json.js" type="text/javascript"></script>
<script src="month_nb.js" type="text/javascript"></script>

然后您就可以使用它了:

>> month_nb('août');
8

这是我的Meta-Press.es项目的一部分,该项目获得了一些资金,并且我将至少在接下来的6年(2013年开始……)中继续努力。

否则,它存在https://github.com/datejs/Datejs,这是一种人工翻译方法。