如何确定日、月或年值是否存在于PHP中的一组非标准化日期字符串中



我有一组未标准化的日期字符串,我正在尝试确定其中是否存在日期、月份或年份值。集合中的某些日期有天、月和年,而其他日期可能只有年或只有年和月。

示例:
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)
}

我不知道日期字符串中日期的所有可能变化。正则表达式必须根据需要展开。

相关内容

  • 没有找到相关文章

最新更新