识别较长消息中与日期相关的文本

时间:2010-11-15 20:08:32

标签: php datetime

我正在编写一个脚本,它将从邮件中提取所有日期并将其转换为时间戳。 PHP的strtotime(类似于Unix的date -c 'some date')将是完美的,因为它识别所有类型的日期,例如:

  • 今天下午5点
  • 2010-11-15 16:30
  • 星期四8:00

但是,我首先找不到这些日期。例如,在以下字符串中,

  

明天晚上9点我将在那里吃晚餐

我需要隔离“明天晚上9点”,因为这是strtotime认可的部分。

是否有正则表达式或类似的东西可以返回所有可由strtotime解析的日期?

2 个答案:

答案 0 :(得分:1)

我唯一能想到的是date_parse。 <{1}}接受的任何格式的正则表达式将是巨大的。

date_parse的一个例子:

strtotime

它会输出这样的东西(我从中移除了不重要的部分,使结果更轻):

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

这是否适合您主要取决于您的输入是什么样的。如果输入字符串中有多个日期实例,则它将无法按预期工作。

答案 1 :(得分:0)

这可能不是完全有效,但应该适用于最多包含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()