在 PHP 中解析日期的字符串

2022-08-30 19:13:27

给定一个任意字符串,例如( or ),您将如何从那里提取日期?"I'm going to play croquet next Friday""Gadzooks, is it 17th June already?"

如果这看起来像是太难篮子的好人选,也许你可以建议一个替代方案。我希望能够解析 Twitter 消息的日期。我正在查看的推文将是用户在此服务上定向的推文,因此可以指导他们使用更简单的格式,但是我希望它尽可能透明。你能想到一个好的中间立场吗?


答案 1

如果你有马力,你可以尝试以下算法。我正在展示一个例子,并将繁琐的工作留给你:)

//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")


答案 2

我会这样做:

首先检查整个字符串是否是 strtotime() 的有效日期。如果是这样,您就完成了。

如果没有,请确定字符串中有多少个单词(例如,在空格上拆分)。设此数字为 n。

循环访问每个 n-1 个单词组合,并使用 strtotime() 查看短语是否为有效日期。如果是这样,您已在原始字符串中找到最长的有效日期字符串。

如果不是,请遍历每个 n-2 个单词组合,并使用 strtotime() 查看短语是否为有效日期。如果是这样,您已在原始字符串中找到最长的有效日期字符串。

...依此类推,直到您找到有效的日期字符串或搜索每个单词/单个单词。通过查找最长的匹配项,您将获得最明智的日期(如果这有意义)。由于你正在处理推文,你的字符串永远不会很大。


推荐