Длительность разбора в простом английском языке

Я хотел бы найти библиотеку actionscript, которая может принимать строки типа:

  • Два дня
  • 2h
  • один месяц
  • неделя

и проанализировать их на длительность (возвращая время в некоторой единице).

Кажется, что это делалось так много раз, и я не хотел бы реализовывать такую ​​вещь сам.

Если нет в actionscript, то в python (я могу запустить это на стороне сервера, я думаю).

(обратите внимание, что я ищу синтаксический анализ, а не форматирование.)

Ответ 1

Только для записи Javascript не будет работать в Flex напрямую. Возможно, вы это знаете.

Теперь datejs - действительно классная библиотека. Что вы действительно должны делать, используйте преимущества JS в AS, используя класс externalInterface.

Используйте следующий код в AS3 и не забудьте включить datejs.js в оболочку html, в которой будет использоваться этот SWF файл с AS3.

//--------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);
}

Для деталей ExternalInterface вы можете просмотреть: http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/flash/external/ExternalInterface.html

Ответ 3

Я предполагаю, что javascript lib будет работать, поскольку языки AS и JS являются одними и теми же стандартами ECMA с несколькими незначительными отличиями.

http://www.datejs.com/ делает то, что вы хотите в JS.

Ответ 4

Стандартное приложение * nix date(1) очень хорошо разбирается в таких спецификациях, как вы можете видеть ниже (shell scripting).

$ 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

Возможно, вы можете посмотреть исходный код GNU coreutils для дальнейшего просветления.

Ответ 5

Я думаю, что если вы собираетесь сделать это в AS3, лучшим вариантом (как я вижу в других ответах) является использование datejs, портирование кода JavaScript в AS3 не сложно, а также у вас есть преимущество в использовании ExternallInterface, если вы не хотите его переносить.

Помните, что ActionScript действительно является клоном JavaScript, поэтому вы можете вставить код datejs и изменить небольшие детали синтаксиса, но mantain the core intact