英語から時間

php time timestamp
英語から時間

時間の英語表現をタイムスタンプに変換するための良いクラス/ライブラリを知っている人はいますか?

目標は、「今から10年後」、「3週間」、「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.
}

  8  5


ベストアンサー

DateTimeクラスを使用します。

例えば。:

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

ETA:拡張可能:

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
  }

}

2


少し前に、自然言語のクエリを時間に変換するhttp://www.timeapi.org/[http://www.timeapi.org]に出会いました。 ただし、APIです。

Rubyのソースコードはgithubにあります。 必要に応じて、PHPに移植してみてください。

1


毎月のイノベーション賞の準優勝者の1人であるPHPClassesから通知を受け取りました:http://www.phpclasses.org/browse/package/5721.html[Text to Timestamp]

あなたはそれを試すことができます…​

1


Cocoaおよびhttp://www.gnustep.org/resources/documentation /Developer/Base/Reference/NSDateFormatter.html[GNUStep]の `NSDateFormatter`はそのような時間表現を処理できます。 GNUStepバージョンはオープンソースです。

0


タイトルとURLをコピーしました