Используйте функцию strtotime
php.
Конечно, вам нужно настроить некоторые правила для их анализа, поскольку вам нужно избавиться от всего дополнительного содержимого в строке, но, кроме этого, это очень гибкая функция, которая, скорее всего, поможет вам здесь .
Например, он может принимать строки типа «следующая пятница» и «15 июня» и возвращать соответствующую метку времени UNIX для даты в строке. Я предполагаю, что если вы рассмотрите некоторые основные правила, такие как поиск «следующего X» и названий недель и месяцев, вы сможете сделать это.
Если бы вы могли найти " в следующую пятницу " из " Я собираюсь сыграть в крокет в следующую пятницу ", вы можете извлечь дату. Похоже, интересный проект! Но имейте в виду, что strtotime
принимает только английские фразы и не будет работать с любым другим языком.
Например, правило, которое будет определять местонахождение всех случаев «Следующий будний день», будет просто:
$datestring = "I'm going to play croquet next Friday";
$weekdays = array('monday','tuesday','wednesday',
'thursday','friday','saturday','sunday');
foreach($weekdays as $weekday){
if(strpos(strtolower($datestring),"next ".$weekday) !== false){
echo date("F j, Y, g:i a",strtotime("next ".$weekday));
}
}
Это вернет дату следующего дня недели, упомянутую в строке, если она следует правилу! В данном конкретном случае выходной сигнал был June 18, 2010, 12:00 am
.
Используя несколько (может быть, больше, чем несколько!) Из этих правил, вы, скорее всего, извлечете правильную дату в большом проценте случаев, учитывая, что пользователи используют правильное написание.
Как было сказано, с регулярными выражениями и небольшим терпением вы можете сделать это. Самая сложная часть кодирования - это решить, каким образом вы будете подходить к своей проблеме, а не кодировать ее, когда знаете, что!