1

値が指定された形式と必ずしも一致しない場合でも、Zend_Date::isDate が true を返すという問題があります。

例えば:

$time = "12:34:56"; // Time doesn't have AM/PM attached

if( Zend_Date::isDate($time, 'hh:mm:ss a') )
    echo "this is true";
else
    echo "this is false";

これは、形式に「ローカライズされた時刻」(私の場合は「AM」/「PM」) が必要であることを示す「a」がリストされていても、常に当てはまります。'12:12:34:56:56' のように完全に形式が間違っていても、true が返されます。ただし、':34:56' の時間は false を返します。これはバグですか、それとも、指定した形式が一致する必要があると考える際に何かが欠けていますか?

ありがとう!

4

1 に答える 1

3

Zend_Date がフォーマットを強制するように構築されているとは思いません。これは、「Zend_Date にこの文字列を渡すと、この形式で押し込めますか?」という質問に答えるように作成されています。本当に誤解を招きます。

あなたの例では、それは本当ですが、実際には次のように評価されます。

Jan 25, 35 12:00:00 AM

これはおそらくあなたが予期していなかったものです。

あなたの偽の例では、それも真実であり、次のように評価されます。

Dec 14, 34 8:56:00 AM (Dec 12, 34 + 56 hours and 56 minutes)

日付を検証するには、Zend_Validator を使用する必要があると思います...

    $validator = new Zend_Validate_Date(array('format' => 'hh:mm:ss a'));
    var_dump($validator->isValid("12:34:56 pm")); // true
    var_dump($validator->isValid("14:34:56 pm")); // false, actually 2pm
    var_dump($validator->isValid("01:11:11 am")); // true
    var_dump($validator->isValid("01:11:11 xm")); // true, 24h fallback
    var_dump($validator->isValid("24:01:01")); // false
    var_dump($validator->isValid("16:01:01")); // true, 24h fallback

最初に日付を検証して実行すると、Zend_Date に期待どおりの結果が得られるはずです。

于 2010-12-08T20:24:10.550 に答える