关于apache flex:用简单的英语解析持续时间

Parse durations in simple English

我想找到一个可以使用如下字符串的操作脚本库:

  • 两天
  • 2h
  • 一个月
  • 一星期

并将它们解析为持续时间(以某个单位返回时间)。

好像以前做过很多次,我不想自己去做。

如果不在actionscript中,那么在python中(我想我可以在服务器端运行它)。

(请注意,我正在寻找解析,而不是格式化…)


据记录,javascript不能直接在flex中工作。我相信你知道这一点。

现在,DateJS是一个非常酷的库,您真正应该做的是,使用中的JS的优点作为使用外部接口类。

在AS3中使用以下代码,并确保在HTML包装器中包含datejs.js,在HTML包装器中将使用此AS3生成的SWF。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
//--------CODE IN AS-----------------//
public function returnDate(date:String):void
{
    Alert.show(date);
}

ExternalInterface.addCallback("returnDate",returnDate);

public function parseDate(userInputString:String):void
{
   ExternalInterface.call("parseStringByUser",userInputString);
}

//------------CODE IN JS----------------//
function parseStringByUser(userInputString)
{
     var parsedDate= Date.parse(userInputString);
     //the line below calls the AS3 function , as AS3 itself exposed it using the ExternalInterface.
         returnDate(parsedDate);
}

对于外部接口详细信息,您可以查看:http://livedocs.adobe.com/flash/9.0/actionscriptlangrefv3/flash/external/externalinterface.html


看有没有用自然语言解析日期和时间的python库?


我认为,如果您要在AS3中进行移植,最好的选择(如我在其他答案中看到的)是使用datejs,将javascript代码移植到AS3并不难,而且如果您不想移植它,您还可以使用ExternallInterface的优势。

请记住,actionscript确实是一个javascript克隆体,因此您可以粘贴datejs的代码并更改语法的一些细节,但保持核心完整。


标准的*nix应用程序date(1)非常擅长分析此类规范,如下面所示(shell脚本)。

1
2
3
$ date; date -d '1 week 2 days 2 hours'
Fri Feb  4 16:31:28 AMT 2011
Sun Feb 13 18:31:28 AMT 2011

也许你可以看一下GNUCoreutils的源代码以获得进一步的启示。


我猜一个javascript lib可以工作,因为as和js语言都来自相同的ecma标准,有一些细微的差别。

http://www.datejs.com/在JS中执行您想要的操作。


有人在这里问了一个类似的问题:Flex/FLASH/爪哇/C中的漂亮日期文本