我很难从字符串中得到所有的年份。
字符串看起来像这样
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';
答案 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];
答案 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.