Извлечение года и прошедшего года из строки в PHP - PullRequest
0 голосов
/ 29 декабря 2018

Мне трудно получить все годы от струны.

Строка будет выглядеть следующим образом

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 голосов
/ 29 декабря 2018

Если вам нужны месяцы, вы можете просто добавить месяцы к регулярному выражению и использовать strtotime и дату для вычисления разницы.
Поскольку у нас истекли секунды, прошедшие между двумя датами, мы получим дату 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

0 голосов
/ 29 декабря 2018

Для этого вы можете использовать встроенные функции 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...