Определите текст, относящийся к дате, в более длинном сообщении - PullRequest
2 голосов
/ 15 ноября 2010

В настоящее время я пишу скрипт, который будет извлекать все даты из сообщения и преобразовывать их в метки времени. Для этого идеально подойдет PHP strtotime (похожий на Unix date -c 'some date'), поскольку он распознает все виды дат, например:

  • 17:00 сегодня
  • 2010-11-15 16: 30
  • Четверг, 8:00

Однако у меня проблемы с поиском этих дат. Например, в следующей строке

Я буду там обедать завтра в 9:00 вечера * 015 *

Мне нужно выделить «завтра в 9:00 вечера», так как это часть, которую распознает strtotime.

Есть ли регулярное выражение или что-то подобное, которое вернуло бы мне все даты, которые могут быть проанализированы strtotime?

Ответы [ 2 ]

1 голос
/ 15 ноября 2010

Единственное, о чем я могу думать, это date_parse .Регулярное выражение, которое соответствует любому формату, принятому strtotime, было бы огромным.

Пример date_parse:

$str = "I'll be there for dinner tomorrow at 9:00pm";
$parsed = date_parse($str);
print_r($parsed);

Было бы выведено что-то вроде этого (Iудалил неважные части из него, чтобы сделать его более светлым):

Array
(
    [year] => 
    [month] => 
    [day] => 
    [hour] => 21               // 9:00pm
    [minute] => 0              // 9:00pm  
    [second] => 0              // 9:00pm
    [fraction] => 0
    [warning_count] => 1
    [is_localtime] => 1
    [zone_type] => 2
    [zone] => -540
    [is_dst] => 
    [tz_abbr] => I
    [relative] => Array
        (
            [year] => 0
            [month] => 0
            [day] => 1          // tomorrow (would be -1 for yesterday, etc.)
            [hour] => 0
            [minute] => 0
            [second] => 0
        )

)

Будет ли это работать для вас, зависит, прежде всего, от того, как выглядит ваш ввод.Если у вас есть более одного экземпляра даты во входной строке, она не будет работать должным образом.

0 голосов
/ 16 ноября 2010

Это может быть не совсем эффективно, но должно работать для любой строки даты, состоящей из 5 слов. Я написал бы функцию, но я думаю, что вы получите идею с комментариями ниже ...

$words = explode(' ',$original_string);

// Use the array_chunk() function break up this array into 1-word,
// 2-word, 3-word, and 4-word long substrings of the original string

// Reform them back into strings and pass each one through strtodate()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...