3

デフォルトでは、ZendFrameworkの日付バリデーターは日付形式を使用しますyyyy-MM-dd

$dateValidator = new Zend_Validate_Date();

しかし、時間と分の検証を追加したいと思います。つまり、ユーザーに時間と分を入力してもらいたいのです。ただし、以下は機能しません。

$dateValidator = new Zend_Validate_Date('yyyy-MM-dd hh:ii');

を入力する2010-02-01と、日付が形式に合わないというエラーが表示されます。入っ2010-02-01 3ても文句はありません。2010-02-01 03:00これは、ユーザーが指定された形式で日付を入力することを強制するのではなく、ユーザーが意味することを前提としています。

日付を指定された形式で入力する必要があることを強制するにはどうすればよいですか?

4

3 に答える 3

4

参照してください:http://framework.zend.com/issues/browse/ZF-6369

基本的には、フォーマット検証の基礎となるコードが正しく機能しないということです。厳密な検証を使用するのではなく、提供された日付を検証するものに強制しようとするため、ハンカチな結果が得られます。

バグが「メジャー」としてマークされているように見えるので、すぐに修正されることを願っています。

于 2010-02-02T16:41:42.720 に答える
4

ノアの答えに加えて、それZend_Validate_Dateは本当にひどく柔軟性がありません。つまり、日付入力に対してより寛容なポリシーが必要な場合です。

さて、ZFZend_Filter_Dateにさまざまな些細な(非常に解析可能ではあるが)形式の日付セレクター/ユーザー入力サプライを正規化するが付属している場合、日付を正規化された形式にフィルター処理して、それがそのフォーマット。しかし、そうではありません。

とはいえ、この問題には多くの正しい解決策があります。おそらく最も簡単なのはこれです:

$validator = new \Zend_Validate_Callback(function($value) {
    return (bool)strtotime($value);
});

個人的には、日付/日時がyyyy / MM / dd、2012年9月23日、または「-2週間」のどちらであるかは関係ありません。私が本当に気にするのは、strtotimeが解析するのに十分スマートかどうかだけです。それ。

于 2012-01-15T03:08:46.580 に答える
1

スティーブンの答えに+1。検証する必要のある形式をすでに知っていたので、同様の解決策を選びました。

$validator = new \Zend_Validate_Callback(function($value) {

    return (bool) date_create_from_format('Y-m-d H:i', $value);
});
于 2013-02-20T15:44:06.953 に答える