3
echo date('r',strtotime("16 Dec, 2010")); //Tue, 16 Dec 2008 20:10:00 +0530
echo date('r',strtotime("16 Dec  2010")); //Sat, 16 Jan 2010 00:00:00 +0530

那是错误的......它应该失败或者应该正确解析。你知道 php 中有什么强大的自然语言日期/时间解析器吗?你如何在php中解析自然语言日期时间?

编辑:

var_dump(strtotime("16 Dec, abcd")); //bool(false)

“2010 年 12 月 16 日”要么是有效的 GNU 日期输入格式,要么不是。在第一种情况下,它应该返回正确的答案,而在第二种情况下,它应该返回错误。这就是我所说的“错误”。

编辑:

目的是为了接受大量的用户输入。

4

5 回答 5

2

如果您知道时间在字符串中以什么格式表示,则可以strptime()与适当的格式字符串一起使用来解析它。当它无法按照格式解释字符串时,它至少会报错。

此函数存在于 PHP 5.1.0 及更高版本中。

如果你想接受任意的用户输入,你应该向用户提供清晰明了的反馈,这样她就可以对错误解释的日期做点什么。大多数时候,无论如何都不会有问题,而且你永远无法捕捉到所有有问题的情况(想想美国与欧洲的格式)。

于 2008-12-18T12:51:48.053 回答
1

有一个名为 Chronic 的 Ruby 类具有处理方便用户输入所需的灵活性:http: //chronic.rubyforge.org/

我相信您可以通过将 Ruby 的 Time 替换为 PHP 的 DateTime 来将其移植到 PHP。

于 2009-10-09T04:58:56.463 回答
1

没错,您提供的数据是模棱两可的 - 天壤之别。

模棱两可的数据意味着您可以合理预期的最多是“最佳猜测”。你可能不同意它是如何做出这个最佳猜测的,但这并不是“错误的”,这只是对最有可能的情况的不同看法。在不消除歧义的情况下,您不能期望更多。

进一步的想法,主要是对 OP 的评论:

静默失败不是一种选择——决定何时或不静默失败受制于相同的规则,并且会受到相同的模棱两可的影响。

哪个示例字符串是错误的,应该默默地失败?你旁边的那个人呢?他认为同一个是错的吗?如果您通过不并排比较它们来删除上下文怎么办?

这里唯一的“错误”是期望一个函数能够从总是受到歧义的数据中破译出确切的含义......这只是那些例子,我什至还没有得到日期:) ( 1/2/08 是 2 月 1 日?还是 1 月 2 日?1908 年?2008 年?8 日?)

对,就是说,我要写一个名为'is_this_art'的函数......

于 2008-12-18T13:16:05.960 回答
0

我不熟悉任何一个,但也许有人可以提供一个已经写好的。同时,我建议您在通过 strtotime 之前通过正则表达式或其他 munging 运行您的日期数据,并对其输出进行一些完整性检查以查看返回的日期是否在可接受的范围内。

于 2008-12-18T12:44:34.993 回答
0

strtotime 是您可以找到的最佳功能。我怀疑日期的任意字符串表示是否会被 100% 正确解释,因为它至少需要一些有关所使用格式的信息。

换句话说:请定义自然语言(正如 php 解释器正确指出的那样,您只是在问题中使用了两个不同的版本)

于 2008-12-18T12:43:12.547 回答