3
echo date('r',strtotime("16 Dec, 2010")); //Tue, 16 Dec 2008 20:10:00 +0530
echo date('r',strtotime("16 Dec  2010")); //Sat, 16 Jan 2010 00:00:00 +0530

それは間違っています...失敗するか、正しく解析する必要があります。PHP の堅牢な自然言語日付/時刻パーサーを知っていますか? PHPで自然言語の日時をどのように解析しますか?

編集:

var_dump(strtotime("16 Dec, abcd")); //bool(false)

「2010 年 12 月 16 日」は、有効な GNU 日付入力形式であるか、そうでないかのいずれかです。最初のケースでは正しい答えを返し、2 番目のケースでは false を返す必要があります。これが「間違っている」という意味です。

編集:

目的は、非常に多様なユーザー入力を受け入れることです。

4

5 に答える 5

2

文字列で時刻がどの形式で表されているかがわかっている場合はstrptime()、適切な形式文字列と一緒に使用して解析できます。形式に従って文字列を解釈できない場合、少なくともエラーが報告されます。

この関数は PHP 5.1.0 以降に存在します。

任意のユーザー入力を取得したい場合は、ユーザーが誤って解釈された日付について何かできるように、明確で明白なフィードバックをユーザーに提供する必要があります。ほとんどの場合、とにかく問題は発生せず、問題のあるすべてのケースを把握することはできません (アメリカとヨーロッパの形式を考えてみてください)。

于 2008-12-18T12:51:48.053 に答える
1

便利なユーザー入力を処理するために必要な柔軟性を持つ Chronic という Ruby クラスがあります: http://chronic.rubyforge.org/

Ruby の Time を PHP の DateTime に置き換えるだけで、PHP に移植できるはずです。

于 2009-10-09T04:58:56.463 に答える
1

それは間違っていません。あなたが提供しているデータはあいまいです - 違いの世界があります。

あいまいなデータとは、そのデータから合理的に期待できるのが「最善の推測」であることを意味します。この最良の推測をどのように行うかについては同意しないかもしれませんが、それは「間違っている」わけではなく、何が最も可能性が高いかについての別の意見です。あいまいさを取り除かない限り、それ以上のことは期待できません。

主にOPに関するホップのコメントへのさらなる考え:

静かに失敗することは選択肢ではありません - いつ静かに失敗するかを決定することは、同じルールの対象となり、同じあいまいさによってスローされます。

文字列の例のうち、間違っているものはどれですか? あなたの隣にいる男はどうですか?彼は同じものが間違っていると思いますか? それらを並べて比較しないでコンテキストを削除するとどうなりますか?

ここで唯一「間違っている」のは、関数が常にあいまいさの対象となるデータから正確な意味を解読できることを期待していることです...これは単なる例であり、まだ日付を取得していません:) ( 1/2/08 は 2 月の 1 日ですか? または 1908 年? 2008 年? 8? の 1 月 2 日ですか?)

そうは言っても、「is_this_art」という関数を書きに行きます...

于 2008-12-18T13:16:05.960 に答える
0

strtotime は、そのために見つけることができる最高の関数です。日付の任意の文字列表現が 100% 正しく解釈されるとは思えません。使用されるフォーマットに関する情報が少なくとも必要になるからです。

言い換えれば、自然言語を定義してください(phpインタープリターが正しく指摘したように、質問で2つの異なるバージョンを使用しただけです)

于 2008-12-18T12:43:12.547 に答える
0

誰かがすでに書かれたものを提供できるかもしれませんが、私はどれにも精通していません。それまでの間、strtotime に入れる前に正規表現やその他の変更で日付データを実行し、その出力に対して少し健全性チェックを行って、返された日付が許容範囲内にあるかどうかを確認することをお勧めします。

于 2008-12-18T12:44:34.993 に答える