从PHP中的字符串中提取年份和经过的年份

时间:2018-12-29 12:56:58

标签: php codeigniter

我很难从字符串中得到所有的年份。

字符串看起来像这样

this is a sample January 2017, this is a sample June 12, 2018. This is a sample October 18, 2018. 

例如,我想从段落中检索所有,然后从中获取经过的年份。

由于列表中有2017年和2018年,因此过去的时间为1年。

谢谢您的帮助!

编辑:

谢谢@alive的回答。这解决了我的问题

preg_match_all('/[0-9]{4}/', preg_replace('/\s+/','', $experience), $matches);
            $years_array = array_values(array_unique($matches[0]));
            sort($years_array);
            $difference = end($years_array)-$years_array[0];
            echo $difference.' years';

2 个答案:

答案 0 :(得分:1)

您可以为此使用php内置函数:

preg_match_all('/[0-9]{4}/', $str, $matches);
$years_array = array_values(array_unique($matches[0]));
sort($years_array);
$difference = end($years_array)-$years_array[0];

输出:-https://3v4l.org/ZLtWU

答案 1 :(得分:1)

如果您确实希望使用月份,则只需将月份添加到正则表达式中,并使用strtotime和date来计算差异。
因为我们得到两个日期之间经过的秒数,所以date将返回1970年的日期。因此减去1970,就可以得到年份。

$str = 'this is a sample January 2017, this is a sample June 12, 2019. This is a sample October 18, 2018.';
preg_match_all('/(January|February|March|April|May|June|July|August|September|October|November|December).*?([0-9]{4})/', $str, $matches);

foreach($matches[0] as $m){
    $new[] = strtotime($m);
}

sort($new);
$difference = end($new)-$new[0];
$years =  date("Y", $difference)-1970;
$months =  date("n", $difference);

echo $years . ' years and ' . $months . ' months'; // 2 years and 6 months.

https://3v4l.org/RqPaC