¿Alguien sabe de una buena clase/biblioteca para convertir representaciones de tiempo en inglés en marcas de tiempo?English to Time
El objetivo es convertir frases en lenguaje natural como "diez años a partir de ahora" y "tres semanas" y "en 10 minutos" y elaborando la marca de tiempo de unix de mejor combinación para ellos.
He cortado un código bastante pobre y no probado para ponerlo en marcha, pero estoy seguro de que hay analizadores geniales para calendarios y cosas por el estilo.
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.
}
¿Qué hay de "tres años, dos días y cinco minutos en el futuro "como entrada? – chelmertz
Sí, exactamente cosas así. Esto es lo que necesito. –
"tres años, dos días y cinco minutos" y similar debería traducirse fácilmente en un intervalo ISO8601: "P3Y2DT5M" que puede alimentar a un Intervalo de fecha y agregar a un objeto DateTime. – dnagirl