Ale*_*lex 39 php date strtotime
我正在编写一个将从CSV文件导入一些数据的脚本.当我这样做时,我希望能够检查变量以查看它是否是有效的日期字符串.
我已经看到了几种检查刺痛是否是日期的方法,但是大多数方法都需要你现在的格式.我不知道日期的格式.
现在我正在使用strtotime(),但这很容易
$field ="May";
if(strtotime($field)){
echo "This is a date";
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,"May"是人的名字,而不是日期.
任何人都可以推荐更可靠的功能吗?
根据你们中的一些人的问题进行编辑.
对于在我的情况下作为"日期"传递的变量,它需要特定于日/月/年,所以只是"May"将模糊计算.
基于此和Pauls的好点,我们也可以测试一下,看看字符串是否包含数字,例如
$field ="May";
if(strtotime($field) && 1 === preg_match('~[0-9]~', $field)){
echo "This is a date";
}else{
echo "Nope not a date";
}
Run Code Online (Sandbox Code Playgroud)
这似乎涵盖了我的直接需求,但任何人都可以发现任何问题或建议改进吗?
sal*_*uce 56
使用date_parse并检查返回数组的值
$date = date_parse("May")
// ["year"] == FALSE
// ["month"] == 5
// ["day"] == FALSE
Run Code Online (Sandbox Code Playgroud)
您也可以将它们传递给checkdate.
$date = date_parse($someString);
if ($date["error_count"] == 0 && checkdate($date["month"], $date["day"], $date["year"]))
echo "Valid date";
else
echo "Invalid date";
Run Code Online (Sandbox Code Playgroud)
我不认为这个问题有一个多功能的答案.根据您的使用情况,您可能有不同的策略.
你strtotime()是一个完美的解决方案,但正如你所说,你最终可能会出现误报.为什么?因为可能是一个词或一个名字.但是,结果是strtotime('May')什么?
echo date(DateTime::ISO8601, strtotime('May'));
2012-05-21T00:00:00+0200
Run Code Online (Sandbox Code Playgroud)
因此,仅给出月份将返回当前年份的日期以及从给定月份的午夜开始的当前日期.一种可能的解决方案是检查您的字符串是否包含当前日期和/或当前年份,这样,您可以检查以确保您的日期是完全合格的日期并且有效.
echo date(DateTime::ISO8601, strtotime('May Day')); // (strtotime() returns false)
1970-01-01T01:00:00+0100
echo date(DateTime::ISO8601, strtotime('May 21'));
2012-05-21T00:00:00+0200
Run Code Online (Sandbox Code Playgroud)
一个简单的strpos()甚至是正则表达式应该可以解决问题.
但是它有点奇怪,只有在没有其他办法的情况下才能使用它.
我相信更好的解决方案是定义一组有效格式并插入结果以确保日期有效.
$validDateFormatPatterns = array(
'[0-9]{1,2}-[0-9]{1,2}-[0-9]{4}', // 21-05-2012, obviously this pattern is simple and would accept 05-21-2012,
'the [0-9]{1,2}(th|st|nd|rd) (January|February|...|May|...|December) [0,9]{4}', // The 21st May 2012
);
Run Code Online (Sandbox Code Playgroud)
您应该尝试覆盖大部分情况,我相信您将能够找到检查最新日期格式的正则表达式.
在任何情况下,您可能需要不时调整您的功能,因为没有简单的方法可以使它具有防弹功能.
| 归档时间: |
|
| 查看次数: |
70350 次 |
| 最近记录: |