我有一组未标准化的日期字符串,我正在尝试确定其中是否存在日期、月份或年份值。集合中的某些日期有天、月和年,而其他日期可能只有年或只有年和月。
示例:date('Y-m-d', strtotime('April 1982'))
返回:1982-04-01
所需结果:1982-04:00
date('Y-m-d', strtotime('1982'))
返回:1982-08-11(月和日为当前日期(
所需结果:1982-00-00
编辑:
忘记想要的结果,因为我不再计划在00前代表它们。我只是想确定日期、月份或年份值是否如标题所示存在于字符串中。
date_parse((函数适用于此问题。然而,在我看来,它有一个缺陷。如果不存在某一天,则该天也显示为1。请参阅用户参与的笔记date_parse((。
下面的函数DateAnalysis试图用正则表达式消除这种情况:
function DateAnalysis($dateString){
$components = date_parse($dateString);
if($components['day'] === 1 AND
preg_match('~^1 |^01 |-01$|-1$~',$dateString) == 0){
$components['day'] = false;
}
return $components;
}
更多的变体可以在这里找到。
示例:
var_dump(DateAnalysis('April 1986'));
输出:
array(12) {
["year"]=>
int(1986)
["month"]=>
int(4)
["day"]=>
bool(false)
["hour"]=>
bool(false)
["minute"]=>
bool(false)
["second"]=>
bool(false)
["fraction"]=>
bool(false)
["warning_count"]=>
int(0)
["warnings"]=>
array(0) {
}
["error_count"]=>
int(0)
["errors"]=>
array(0) {
}
["is_localtime"]=>
bool(false)
}
我不知道日期字符串中日期的所有可能变化。正则表达式必须根据需要展开。