Time İngilizce

4 Cevap php

Herkes damgaları içine zaman İngilizce temsilleri dönüştürmek için iyi bir sınıf / kitaplığı biliyor mu?

Amacınız, "Bundan on yıl" ve "üç hafta" gibi doğal dil ifadeler dönüştürmek ve "10 dakika" ve onlar için en iyi maç unix zaman damgası çalışma dışarı etmektir.

Bunu devam almak için bazı oldukça kötü ve denenmemiş kodunu kesmek var, ama ben büyük ayrıştırıcılarda takvimler ve bu tür için orada vardır eminim.

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.
}

4 Cevap

DateTime sınıfını kullanın.

örneğin:

$string='four days ago';
$d=date_create($string);
$d->getTimestamp();

ETA: which you could extend:

class myDateTime extends DateTime {
  static $defined_expressions=array(...);

  function __construct($expression=NULL) {
     if ($exp=$this->translate($expression)) {
       parent::__construct($exp); 
     }
  }

  function translate($exp) {
     //check to see if strtotime errors or not
     //if it errors, check if $exp matches a pattern in self::$defined_expressions
     return $exp, modified $exp or false
  }

}

Bazen önce ben zaman içine doğal dil sorguları dönüştürür http://www.timeapi.org hangi rastlamıştı. Ama bir API.

Yakut kaynak kodu github üzerinde. Eğer gerekirse, ben PHP noktasına deneyebilirsiniz sanırım.

Sadece PHPClasses bir bildirim aylık inovasyon ödülü runner-up biriyle, var: Text to Timestamp

Bunu deneyebilirsin ...

Cocoa 's ve GNUStep' s NSDateFormatter gibi zaman temsillerini idare edebiliyoruz. GNUStep versiyonu açık kaynak.