Перевод даты из

InstantCMS 2.X
#1 5 июня 2020 в 16:31
Здравствуйте, уважаемые.
Возник такой вопрос, получаю текст с данными, начинается обычно так: "Родился 21 февраля 1956 года ............"
Нужно вырезать дату и перевести в вид "1956-02-21"
Проблема в том, что в тексте может быть полная дата рождения, может только год рождения, может вообще ничего не быть.
Помогите составить регулярное выражение, или может другим путём реализовать задуманное.
#2 5 июня 2020 в 17:12
Откуда получаете? В каком виде? Каким способом?
#3 5 июня 2020 в 19:34


Откуда получаете? В каком виде? Каким способом?

Lora
Получаю парсером со стороннего сайта в виде текста, который начинается как я написал выше.
#4 5 июня 2020 в 19:52
Тогда практически никак. Теоретически, если предположить, что перед датой и после известные слова, то можно всё что между ними вытащить, разложить, пропустить через условия и снова собрать.Но это лишь в теории).
#5 5 июня 2020 в 20:43
@boom,
Так попробуйте:
  1. $string = "Родилась 1 октября 1983 года. В мороз и солнце, в день чудесный";
  2.  
  3. $months = array('января', 'февраля', 'марта', 'апреля', 'мая', 'июня', 'июля', 'августа', 'сентября', 'октября', 'ноября', 'декабря');
  4.  
  5. foreach ($months as $key => $mo){
  6. if (strpos($string, $mo) !== false){
  7.  
  8. $month = $key >= 9 ? $key + 1 : 0 . ($key + 1);
  9. }
  10. }
  11.  
  12. preg_match('/одил[ся|ась].*?(\d+).*?([0-9]{4}).*год[а|у]/', $string, $match);
  13.  
  14. if(!empty($month)){
  15.  
  16. $bithday_date = $match[2].'-'.$month.'-'. ($match[1] < 10 ? 0 . $match[1] : $match[1]);
  17.  
  18. } else if (!empty($match[2])){
  19.  
  20. $bithday_date = $match[2].'-01-01';
  21.  
  22. } else {
  23.  
  24. $bithday_date = '1970-01-01';
  25. }
  26.  
  27. echo $bithday_date;
#6 5 июня 2020 в 21:31
Ris,

Проблема в том, что в тексте может быть полная дата рождения, может только год рождения, может вообще ничего не быть.

@boom
#7 5 июня 2020 в 21:42

Проблема в том,

Lora
Проблема? rofl
  1. else {$bithday_date = '1970-01-01';}
#8 6 июня 2020 в 01:02
Ris, Спасибо Вам, дорогой человек.
#9 6 июня 2020 в 16:59
Ris, красивое решение smile
Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.