在 PHP 中解析日期的字符串
给定一个任意字符串,例如( or ),您将如何从那里提取日期?"I'm going to play croquet next Friday"
"Gadzooks, is it 17th June already?"
如果这看起来像是太难篮子的好人选,也许你可以建议一个替代方案。我希望能够解析 Twitter 消息的日期。我正在查看的推文将是用户在此服务上定向的推文,因此可以指导他们使用更简单的格式,但是我希望它尽可能透明。你能想到一个好的中间立场吗?
给定一个任意字符串,例如( or ),您将如何从那里提取日期?"I'm going to play croquet next Friday"
"Gadzooks, is it 17th June already?"
如果这看起来像是太难篮子的好人选,也许你可以建议一个替代方案。我希望能够解析 Twitter 消息的日期。我正在查看的推文将是用户在此服务上定向的推文,因此可以指导他们使用更简单的格式,但是我希望它尽可能透明。你能想到一个好的中间立场吗?
如果你有马力,你可以尝试以下算法。我正在展示一个例子,并将繁琐的工作留给你:)
//Attempt to perform strtotime() on each contiguous subset of words...
//1st iteration
strtotime("Gadzooks, is it 17th June already")
strtotime("is it 17th June already")
strtotime("it 17th June already")
strtotime("17th June already")
strtotime("June already")
strtotime("already")
//2nd iteration
strtotime("Gadzooks, is it 17th June")
strtotime("is it 17th June")
strtotime("17th June") //date!
strtotime("June") //date!
//3rd iteration
strtotime("Gadzooks, is it 17th")
strtotime("is it 17th")
strtotime("it 17th")
strtotime("17th") //date!
//4th iteration
strtotime("Gadzooks, is it")
//etc
我们可以假设这比仅仅因为它包含更多的单词更准确......即“下周五”将永远比“周五”更准确。strtotime("17th June")
strtotime("17th")
我会这样做:
首先检查整个字符串是否是 strtotime() 的有效日期。如果是这样,您就完成了。
如果没有,请确定字符串中有多少个单词(例如,在空格上拆分)。设此数字为 n。
循环访问每个 n-1 个单词组合,并使用 strtotime() 查看短语是否为有效日期。如果是这样,您已在原始字符串中找到最长的有效日期字符串。
如果不是,请遍历每个 n-2 个单词组合,并使用 strtotime() 查看短语是否为有效日期。如果是这样,您已在原始字符串中找到最长的有效日期字符串。
...依此类推,直到您找到有效的日期字符串或搜索每个单词/单个单词。通过查找最长的匹配项,您将获得最明智的日期(如果这有意义)。由于你正在处理推文,你的字符串永远不会很大。