Кто-нибудь знает о хорошем классе/библиотеке для преобразования английских представлений о времени в метку времени?English to Time
Цель состоит в том, чтобы преобразовать естественные языковые фразы, такие как «через десять лет» и «три недели» и «через 10 минут», и разработать для них наилучшую временную метку unix.
Я взломал какой-то довольно бедный и непроверенный код, чтобы продолжить работу, но я уверен, что там есть большие парсеры для календарей и т. Д.
private function timeparse($timestring)
{
$candidate = @strtotime($timestring);
if ($candidate > time()) return $candidate; // Let php have a bash at it
//$thisyear = date("Y");
if (strpos($timestring, "min") !== false) // Context is minutes
{
$nummins = preg_replace("/\D/", "", $timestring);
$candidate = @strtotime("now +$nummins minutes");
return $candidate;
}
if (strpos($timestring, "hou") !== false) // Context is hours
{
$numhours = preg_replace("/\D/", "", $timestring);
$candidate = @strtotime("now +$numhours hours");
return $candidate;
}
if (strpos($timestring, "day") !== false) // Context is days
{
$numdays = preg_replace("/\D/", "", $timestring);
$candidate = @strtotime("now +$numdays days");
return $candidate;
}
if (strpos($timestring, "year") !== false) // Context is years (2 years)
{
$numyears = preg_replace("/\D/", "", $timestring);
$candidate = @strtotime("now +$numyears years");
return $candidate;
}
if (strlen($timestring) < 5) // 10th || 2nd (or probably a number)
{
$day = preg_replace("/\D/", "", $timestring);
if ($day > 0)
{
$month = date("m");
$year = date("y");
return strtotime("$month/$day/$year");
}
else
{
return false;
}
}
return false; // No can do.
}
Как насчет «три года, два дня и пять минут в будущее "в качестве вклада? – chelmertz
Да, точно такие вещи. Это то, что мне нужно. –
«три года, два дня и пять минут» и тому подобное должны легко трансформироваться в интервал ISO8601: «P3Y2DT5M», который вы можете подавать на DateInterval и добавлять к объекту DateTime. – dnagirl